feat: add default visibility setting to extension

This commit is contained in:
Steven
2024-04-05 22:54:03 +08:00
parent c6821a7090
commit e2c7b8c7b9
7 changed files with 147 additions and 40 deletions

View File

@@ -0,0 +1,27 @@
import { createContext, useContext } from "react";
import { Visibility } from "@/types/proto/api/v1/common";
interface Context {
instanceUrl?: string;
accessToken?: string;
defaultVisibility: string;
setInstanceUrl: (instanceUrl: string) => void;
setAccessToken: (accessToken: string) => void;
setDefaultVisibility: (visibility: string) => void;
}
export const StorageContext = createContext<Context>({
instanceUrl: undefined,
accessToken: undefined,
defaultVisibility: Visibility.PRIVATE,
setInstanceUrl: () => {},
setAccessToken: () => {},
setDefaultVisibility: () => {},
});
const useStorageContext = () => {
const context = useContext(StorageContext);
return context;
};
export default useStorageContext;

View File

@@ -0,0 +1,4 @@
import useStorageContext from "./context";
import StorageContextProvider from "./provider";
export { useStorageContext, StorageContextProvider };

View File

@@ -0,0 +1,58 @@
import { Storage } from "@plasmohq/storage";
import { useEffect, useState } from "react";
import { Visibility } from "@/types/proto/api/v1/common";
import { StorageContext } from "./context";
interface Props {
children: React.ReactNode;
}
const StorageContextProvider = ({ children }: Props) => {
const storage = new Storage();
const [instanceUrl, setInstanceUrl] = useState<string | undefined>(undefined);
const [accessToken, setAccessToken] = useState<string | undefined>(undefined);
const [defaultVisibility, setDefaultVisibility] = useState<Visibility>(Visibility.PRIVATE);
const [isInitialized, setIsInitialized] = useState(false);
useEffect(() => {
(async () => {
const domain = await storage.get("domain");
const accessToken = await storage.get("access_token");
const defaultVisibility = (await storage.get("default_visibility")) as Visibility;
setInstanceUrl(domain);
setAccessToken(accessToken);
setDefaultVisibility(defaultVisibility);
setIsInitialized(true);
})();
storage.watch({
domain: (c) => {
setInstanceUrl(c.newValue);
},
access_token: (c) => {
setAccessToken(c.newValue);
},
default_visibility: (c) => {
setDefaultVisibility(c.newValue as Visibility);
},
});
}, []);
return (
<StorageContext.Provider
value={{
instanceUrl,
accessToken,
defaultVisibility,
setInstanceUrl: (instanceUrl: string) => storage.set("domain", instanceUrl),
setAccessToken: (accessToken: string) => storage.set("access_token", accessToken),
setDefaultVisibility: (visibility: Visibility) => storage.set("default_visibility", visibility),
}}
>
{isInitialized && children}
</StorageContext.Provider>
);
};
export default StorageContextProvider;