aboutsummaryrefslogtreecommitdiff
path: root/packages/taler-wallet-webextension/src/hooks/useExtendedPermissions.ts
diff options
context:
space:
mode:
authorSebastian <sebasjm@gmail.com>2021-06-16 18:21:03 -0300
committerSebastian <sebasjm@gmail.com>2021-06-16 18:21:15 -0300
commit0b4976601fe2ecb0462fe72ae188b5cbba06d9cc (patch)
tree93f18c88d754430d2c1261109c1e9b6c1ac7a500 /packages/taler-wallet-webextension/src/hooks/useExtendedPermissions.ts
parentd58945c830a33910dd93bc159c1ffe5d490df846 (diff)
downloadwallet-core-0b4976601fe2ecb0462fe72ae188b5cbba06d9cc.tar.xz
components renaming to follow react pattern
Diffstat (limited to 'packages/taler-wallet-webextension/src/hooks/useExtendedPermissions.ts')
-rw-r--r--packages/taler-wallet-webextension/src/hooks/useExtendedPermissions.ts53
1 files changed, 53 insertions, 0 deletions
diff --git a/packages/taler-wallet-webextension/src/hooks/useExtendedPermissions.ts b/packages/taler-wallet-webextension/src/hooks/useExtendedPermissions.ts
new file mode 100644
index 000000000..809863dc5
--- /dev/null
+++ b/packages/taler-wallet-webextension/src/hooks/useExtendedPermissions.ts
@@ -0,0 +1,53 @@
+import { useState, useEffect } from "preact/hooks";
+import * as wxApi from "../wxApi";
+import { getPermissionsApi } from "../compat";
+import { extendedPermissions } from "../permissions";
+
+
+export function useExtendedPermissions(): [boolean, () => void] {
+ const [enabled, setEnabled] = useState(false);
+
+ const toggle = () => {
+ setEnabled(v => !v);
+ handleExtendedPerm(enabled).then(result => {
+ setEnabled(result);
+ });
+ };
+
+ useEffect(() => {
+ async function getExtendedPermValue(): Promise<void> {
+ const res = await wxApi.getExtendedPermissions();
+ setEnabled(res.newValue);
+ }
+ getExtendedPermValue();
+ }, []);
+ return [enabled, toggle];
+}
+
+async function handleExtendedPerm(isEnabled: boolean): Promise<boolean> {
+ let nextVal: boolean | undefined;
+
+ if (!isEnabled) {
+ const granted = await new Promise<boolean>((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);
+ });
+ });
+ const res = await wxApi.setExtendedPermissions(granted);
+ nextVal = res.newValue;
+ } else {
+ const res = await wxApi.setExtendedPermissions(false);
+ nextVal = res.newValue;
+ }
+ console.log("new permissions applied:", nextVal ?? false);
+ return nextVal ?? false
+} \ No newline at end of file