diff options
Diffstat (limited to 'packages/taler-wallet-webextension/src/hooks/useClipboardPermissions.ts')
-rw-r--r-- | packages/taler-wallet-webextension/src/hooks/useClipboardPermissions.ts | 69 |
1 files changed, 28 insertions, 41 deletions
diff --git a/packages/taler-wallet-webextension/src/hooks/useClipboardPermissions.ts b/packages/taler-wallet-webextension/src/hooks/useClipboardPermissions.ts index 0f035d0f2..25757f473 100644 --- a/packages/taler-wallet-webextension/src/hooks/useClipboardPermissions.ts +++ b/packages/taler-wallet-webextension/src/hooks/useClipboardPermissions.ts @@ -14,24 +14,42 @@ GNU Taler; see the file COPYING. If not, see <http://www.gnu.org/licenses/> */ -import { TalerError } from "@gnu-taler/taler-wallet-core"; import { useEffect, useState } from "preact/hooks"; +import { useAlertContext } from "../context/alert.js"; import { useBackendContext } from "../context/backend.js"; import { ToggleHandler } from "../mui/handlers.js"; import { platform } from "../platform/foreground.js"; export function useClipboardPermissions(): ToggleHandler { const [enabled, setEnabled] = useState(false); - const [error, setError] = useState<TalerError | undefined>(); const api = useBackendContext(); + const { pushAlertOnError } = useAlertContext(); - const toggle = async (): Promise<void> => { - return handleClipboardPerm(enabled, setEnabled, api.background).catch( - (e) => { - setError(TalerError.fromException(e)); - }, - ); - }; + async function handleClipboardPerm(): Promise<void> { + if (!enabled) { + // 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) { + setEnabled(false); + throw lastError; + } + setEnabled(granted); + } else { + try { + await api.background + .call("toggleHeaderListener", false) + .then((r) => setEnabled(r.newValue)); + } catch (e) { + console.log(e); + } + } + return; + } useEffect(() => { async function getValue(): Promise<void> { @@ -47,38 +65,7 @@ export function useClipboardPermissions(): ToggleHandler { return { value: enabled, button: { - onClick: toggle, - error, + onClick: pushAlertOnError(handleClipboardPerm), }, }; } - -async function handleClipboardPerm( - isEnabled: boolean, - onChange: (value: boolean) => void, - background: ReturnType<typeof useBackendContext>["background"], -): 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; - } - onChange(granted); - } else { - try { - await background - .call("toggleHeaderListener", false) - .then((r) => onChange(r.newValue)); - } catch (e) { - console.log(e); - } - } - return; -} |