diff --git a/src/components/PermissionMissingScreen.tsx b/src/components/PermissionMissingScreen.tsx
new file mode 100644
index 0000000..2d57e44
--- /dev/null
+++ b/src/components/PermissionMissingScreen.tsx
@@ -0,0 +1,19 @@
+import { Icon } from '~components/Icon';
+
+import '~tabs/PermissionGrant.css';
+
+export interface PermissionMissingProps {
+ onGrant?: () => void;
+}
+
+export function PermissionMissingScreen(props: PermissionMissingProps) {
+ return (
+
+
+
The extension is missing permissions it needs to function
+
+
+ );
+}
diff --git a/src/hooks/useDomainWhitelist.ts b/src/hooks/useDomainWhitelist.ts
index 00adc44..73b8e51 100644
--- a/src/hooks/useDomainWhitelist.ts
+++ b/src/hooks/useDomainWhitelist.ts
@@ -1,5 +1,6 @@
import { useCallback } from 'react';
+import { usePermission } from '~hooks/usePermission';
import { useDomainStorage } from '~utils/storage';
export function useDomainWhitelist() {
@@ -25,11 +26,16 @@ export function useDomainWhitelist() {
export function useToggleWhitelistDomain(domain: string) {
const { domainWhitelist, addDomain, removeDomain } = useDomainWhitelist();
const isWhitelisted = domainWhitelist.includes(domain);
+ const { grantPermission } = usePermission();
const toggle = useCallback(() => {
- if (isWhitelisted) removeDomain(domain);
- else addDomain(domain);
- }, [isWhitelisted, domain, addDomain, removeDomain]);
+ if (!isWhitelisted) {
+ addDomain(domain);
+ return;
+ }
+
+ removeDomain(domain);
+ }, [isWhitelisted, domain, addDomain, removeDomain, grantPermission]);
return {
toggle,
diff --git a/src/hooks/usePermission.ts b/src/hooks/usePermission.ts
index 826693c..9f72045 100644
--- a/src/hooks/usePermission.ts
+++ b/src/hooks/usePermission.ts
@@ -12,7 +12,7 @@ export function usePermission() {
const { addDomain } = useDomainWhitelist();
const [permission, setPermission] = useState(false);
- const grantPermission = useCallback(async (domain: string) => {
+ const grantPermission = useCallback(async (domain?: string) => {
const granted = await chrome.permissions.request({
origins: [''],
});
diff --git a/src/popup.tsx b/src/popup.tsx
index 12644da..1980551 100644
--- a/src/popup.tsx
+++ b/src/popup.tsx
@@ -1,19 +1,28 @@
import { BottomLabel } from '~components/BottomLabel';
import { DisabledScreen } from '~components/DisabledScreen';
import { Frame } from '~components/Frame';
+import { PermissionMissingScreen } from '~components/PermissionMissingScreen';
import { ToggleButton } from '~components/ToggleButton';
import { useDomain } from '~hooks/useDomain';
import { useToggleWhitelistDomain } from '~hooks/useDomainWhitelist';
import './Popup.css';
+import { usePermission } from '~hooks/usePermission';
function IndexPopup() {
const domain = useDomain();
const { isWhitelisted, toggle } = useToggleWhitelistDomain(domain);
+ const { grantPermission, hasPermission } = usePermission();
+
+ let page = 'toggle';
+ if (!hasPermission) page = 'perm';
+ else if (!domain) page = 'disabled';
return (
- {!domain ?
:
}
+ {page === 'toggle' ?
: null}
+ {page === 'disabled' ?
: null}
+ {page === 'perm' ?
: null}