From 2a417881bb5c67cf889d54932025badf5a85a9e0 Mon Sep 17 00:00:00 2001 From: Sebastian Date: Thu, 20 Jan 2022 13:13:53 -0300 Subject: fix permission api, grouping all cta into same path --- .../src/hooks/useAsyncAsHook.ts | 20 ++++-- .../src/hooks/useBackupStatus.ts | 81 ---------------------- .../src/hooks/useExtendedPermissions.ts | 43 +++++------- 3 files changed, 32 insertions(+), 112 deletions(-) delete mode 100644 packages/taler-wallet-webextension/src/hooks/useBackupStatus.ts (limited to 'packages/taler-wallet-webextension/src/hooks') diff --git a/packages/taler-wallet-webextension/src/hooks/useAsyncAsHook.ts b/packages/taler-wallet-webextension/src/hooks/useAsyncAsHook.ts index e9f03d0fa..6efa1d181 100644 --- a/packages/taler-wallet-webextension/src/hooks/useAsyncAsHook.ts +++ b/packages/taler-wallet-webextension/src/hooks/useAsyncAsHook.ts @@ -13,20 +13,30 @@ You should have received a copy of the GNU General Public License along with TALER; see the file COPYING. If not, see */ -import { NotificationType } from "@gnu-taler/taler-util"; +import { NotificationType, TalerErrorDetails } from "@gnu-taler/taler-util"; import { useEffect, useState } from "preact/hooks"; import * as wxApi from "../wxApi"; +import { OperationFailedError } from "@gnu-taler/taler-wallet-core"; interface HookOk { hasError: false; response: T; } -interface HookError { +export type HookError = HookGenericError | HookOperationalError + +export interface HookGenericError { hasError: true; + operational: false, message: string; } +export interface HookOperationalError { + hasError: true; + operational: true, + details: TalerErrorDetails; +} + export type HookResponse = HookOk | HookError | undefined; //"withdraw-group-finished" @@ -41,8 +51,10 @@ export function useAsyncAsHook( const response = await fn(); setHookResponse({ hasError: false, response }); } catch (e) { - if (e instanceof Error) { - setHookResponse({ hasError: true, message: e.message }); + if (e instanceof OperationFailedError) { + setHookResponse({ hasError: true, operational: true, details: e.operationError }); + } else if (e instanceof Error) { + setHookResponse({ hasError: true, operational: false, message: e.message }); } } } diff --git a/packages/taler-wallet-webextension/src/hooks/useBackupStatus.ts b/packages/taler-wallet-webextension/src/hooks/useBackupStatus.ts deleted file mode 100644 index df1e82676..000000000 --- a/packages/taler-wallet-webextension/src/hooks/useBackupStatus.ts +++ /dev/null @@ -1,81 +0,0 @@ -/* - This file is part of GNU Taler - (C) 2021 Taler Systems S.A. - - GNU Taler is free software; you can redistribute it and/or modify it under the - terms of the GNU General Public License as published by the Free Software - Foundation; either version 3, or (at your option) any later version. - - GNU Taler is distributed in the hope that it will be useful, but WITHOUT ANY - WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR - A PARTICULAR PURPOSE. See the GNU General Public License for more details. - - You should have received a copy of the GNU General Public License along with - GNU Taler; see the file COPYING. If not, see - */ - -import { - ProviderInfo, - ProviderPaymentPaid, - ProviderPaymentStatus, - ProviderPaymentType, -} from "@gnu-taler/taler-wallet-core"; -import { useEffect, useState } from "preact/hooks"; -import * as wxApi from "../wxApi"; - -export interface BackupStatus { - deviceName: string; - providers: ProviderInfo[]; - sync: () => Promise; -} - -function getStatusTypeOrder(t: ProviderPaymentStatus) { - return [ - ProviderPaymentType.InsufficientBalance, - ProviderPaymentType.TermsChanged, - ProviderPaymentType.Unpaid, - ProviderPaymentType.Paid, - ProviderPaymentType.Pending, - ].indexOf(t.type); -} - -function getStatusPaidOrder(a: ProviderPaymentPaid, b: ProviderPaymentPaid) { - return a.paidUntil.t_ms === "never" - ? -1 - : b.paidUntil.t_ms === "never" - ? 1 - : a.paidUntil.t_ms - b.paidUntil.t_ms; -} - -export function useBackupStatus(): BackupStatus | undefined { - const [status, setStatus] = useState(undefined); - - useEffect(() => { - async function run() { - //create a first list of backup info by currency - const status = await wxApi.getBackupInfo(); - - const providers = status.providers.sort((a, b) => { - if ( - a.paymentStatus.type === ProviderPaymentType.Paid && - b.paymentStatus.type === ProviderPaymentType.Paid - ) { - return getStatusPaidOrder(a.paymentStatus, b.paymentStatus); - } - return ( - getStatusTypeOrder(a.paymentStatus) - - getStatusTypeOrder(b.paymentStatus) - ); - }); - - async function sync() { - await wxApi.syncAllProviders(); - } - - setStatus({ deviceName: status.deviceId, providers, sync }); - } - run(); - }, []); - - return status; -} diff --git a/packages/taler-wallet-webextension/src/hooks/useExtendedPermissions.ts b/packages/taler-wallet-webextension/src/hooks/useExtendedPermissions.ts index aaab0aa43..12a913b1f 100644 --- a/packages/taler-wallet-webextension/src/hooks/useExtendedPermissions.ts +++ b/packages/taler-wallet-webextension/src/hooks/useExtendedPermissions.ts @@ -17,16 +17,13 @@ import { useState, useEffect } from "preact/hooks"; import * as wxApi from "../wxApi"; import { getPermissionsApi } from "../compat"; -import { extendedPermissions } from "../permissions"; +import { getReadRequestPermissions } from "../permissions"; export function useExtendedPermissions(): [boolean, () => void] { const [enabled, setEnabled] = useState(false); const toggle = () => { - setEnabled((v) => !v); - handleExtendedPerm(enabled).then((result) => { - setEnabled(result); - }); + handleExtendedPerm(enabled, setEnabled) }; useEffect(() => { @@ -39,30 +36,22 @@ export function useExtendedPermissions(): [boolean, () => void] { return [enabled, toggle]; } -async function handleExtendedPerm(isEnabled: boolean): Promise { - let nextVal: boolean | undefined; - +function handleExtendedPerm(isEnabled: boolean, onChange: (value: boolean) => void): void { if (!isEnabled) { - const granted = await new Promise((resolve, reject) => { - // We set permissions here, since apparently FF wants this to be done - // as the result of an input event ... - getPermissionsApi().request(extendedPermissions, (granted: boolean) => { - if (chrome.runtime.lastError) { - console.error("error requesting permissions"); - console.error(chrome.runtime.lastError); - reject(chrome.runtime.lastError); - return; - } - console.log("permissions granted:", granted); - resolve(granted); - }); + // We set permissions here, since apparently FF wants this to be done + // as the result of an input event ... + getPermissionsApi().request(getReadRequestPermissions(), async (granted: boolean) => { + if (chrome.runtime.lastError) { + console.error("error requesting permissions"); + console.error(chrome.runtime.lastError); + onChange(false); + return; + } + console.log("permissions granted:", granted); + const res = await wxApi.setExtendedPermissions(granted); + onChange(res.newValue); }); - const res = await wxApi.setExtendedPermissions(granted); - nextVal = res.newValue; } else { - const res = await wxApi.setExtendedPermissions(false); - nextVal = res.newValue; + wxApi.setExtendedPermissions(false).then(r => onChange(r.newValue)); } - console.log("new permissions applied:", nextVal ?? false); - return nextVal ?? false; } -- cgit v1.2.3