mirror of
https://github.com/aykhans/slash-e.git
synced 2025-07-25 22:34:24 +00:00
feat: add default visibility setting to extension
This commit is contained in:
27
frontend/extension/src/context/context.ts
Normal file
27
frontend/extension/src/context/context.ts
Normal 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;
|
4
frontend/extension/src/context/index.ts
Normal file
4
frontend/extension/src/context/index.ts
Normal file
@@ -0,0 +1,4 @@
|
||||
import useStorageContext from "./context";
|
||||
import StorageContextProvider from "./provider";
|
||||
|
||||
export { useStorageContext, StorageContextProvider };
|
58
frontend/extension/src/context/provider.tsx
Normal file
58
frontend/extension/src/context/provider.tsx
Normal 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;
|
Reference in New Issue
Block a user