diff options
Diffstat (limited to 'packages/taler-wallet-webextension/src/hooks')
| -rw-r--r-- | packages/taler-wallet-webextension/src/hooks/useAutoOpenPermissions.ts (renamed from packages/taler-wallet-webextension/src/hooks/useExtendedPermissions.ts) | 10 | ||||
| -rw-r--r-- | packages/taler-wallet-webextension/src/hooks/useClipboardPermissions.ts | 73 | ||||
| -rw-r--r-- | packages/taler-wallet-webextension/src/hooks/useTalerActionURL.ts | 3 |
3 files changed, 79 insertions, 7 deletions
diff --git a/packages/taler-wallet-webextension/src/hooks/useExtendedPermissions.ts b/packages/taler-wallet-webextension/src/hooks/useAutoOpenPermissions.ts index 06ae84593..727d653af 100644 --- a/packages/taler-wallet-webextension/src/hooks/useExtendedPermissions.ts +++ b/packages/taler-wallet-webextension/src/hooks/useAutoOpenPermissions.ts @@ -20,21 +20,21 @@ import { platform } from "../platform/api.js"; import { ToggleHandler } from "../mui/handlers.js"; import { TalerError } from "@gnu-taler/taler-wallet-core"; -export function useExtendedPermissions(): ToggleHandler { +export function useAutoOpenPermissions(): ToggleHandler { const [enabled, setEnabled] = useState(false); const [error, setError] = useState<TalerError | undefined>(); const toggle = async (): Promise<void> => { - return handleExtendedPerm(enabled, setEnabled).catch((e) => { + return handleAutoOpenPerm(enabled, setEnabled).catch((e) => { setError(TalerError.fromException(e)); }); }; useEffect(() => { - async function getExtendedPermValue(): Promise<void> { + async function getValue(): Promise<void> { const res = await wxApi.containsHeaderListener(); setEnabled(res.newValue); } - getExtendedPermValue(); + getValue(); }, []); return { value: enabled, @@ -45,7 +45,7 @@ export function useExtendedPermissions(): ToggleHandler { }; } -async function handleExtendedPerm( +async function handleAutoOpenPerm( isEnabled: boolean, onChange: (value: boolean) => void, ): Promise<void> { diff --git a/packages/taler-wallet-webextension/src/hooks/useClipboardPermissions.ts b/packages/taler-wallet-webextension/src/hooks/useClipboardPermissions.ts new file mode 100644 index 000000000..c69b116b7 --- /dev/null +++ b/packages/taler-wallet-webextension/src/hooks/useClipboardPermissions.ts @@ -0,0 +1,73 @@ +/* + This file is part of GNU Taler + (C) 2022 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 <http://www.gnu.org/licenses/> + */ + +import { useState, useEffect } from "preact/hooks"; +import * as wxApi from "../wxApi.js"; +import { platform } from "../platform/api.js"; +import { ToggleHandler } from "../mui/handlers.js"; +import { TalerError } from "@gnu-taler/taler-wallet-core"; + +export function useClipboardPermissions(): ToggleHandler { + const [enabled, setEnabled] = useState(false); + const [error, setError] = useState<TalerError | undefined>(); + const toggle = async (): Promise<void> => { + return handleClipboardPerm(enabled, setEnabled).catch((e) => { + setError(TalerError.fromException(e)); + }); + }; + + useEffect(() => { + async function getValue(): Promise<void> { + const res = await wxApi.containsHeaderListener(); + setEnabled(res.newValue); + } + getValue(); + }, []); + + return { + value: enabled, + button: { + onClick: toggle, + error, + }, + }; +} + +async function handleClipboardPerm( + isEnabled: boolean, + onChange: (value: boolean) => void, +): Promise<void> { + if (!isEnabled) { + // We set permissions here, since apparently FF wants this to be done + // as the result of an input event ... + let granted: boolean; + try { + granted = await platform.getPermissionsApi().requestClipboardPermissions(); + } catch (lastError) { + onChange(false); + throw lastError; + } + // const res = await wxApi.toggleHeaderListener(granted); + onChange(granted); + } else { + try { + await wxApi.toggleHeaderListener(false).then((r) => onChange(r.newValue)); + } catch (e) { + console.log(e); + } + } + return; +} diff --git a/packages/taler-wallet-webextension/src/hooks/useTalerActionURL.ts b/packages/taler-wallet-webextension/src/hooks/useTalerActionURL.ts index e1b08278b..75a92fd3c 100644 --- a/packages/taler-wallet-webextension/src/hooks/useTalerActionURL.ts +++ b/packages/taler-wallet-webextension/src/hooks/useTalerActionURL.ts @@ -31,7 +31,6 @@ export function useTalerActionURL(): [ ); const [dismissed, setDismissed] = useState(false); const { findTalerUriInActiveTab, findTalerUriInClipboard } = useIocContext(); - useEffect(() => { async function check(): Promise<void> { const clipUri = await findTalerUriInClipboard(); @@ -52,7 +51,7 @@ export function useTalerActionURL(): [ } } check(); - }, [setTalerActionUrl]); + }, []); const url = dismissed ? undefined : talerActionUrl; return [url, setDismissed]; |
