import { createContext, useCallback, useContext, useMemo, useEffect, } from "react"; import Alert from "@mui/material/Alert"; import { STOKEY_SETTING, DEFAULT_SETTING, KV_SETTING_KEY } from "../config"; import { useStorage } from "./Storage"; import { debounceSyncMeta } from "../libs/storage"; import Loading from "./Loading"; import { logger } from "../libs/log"; const SettingContext = createContext({ setting: DEFAULT_SETTING, updateSetting: () => {}, reloadSetting: () => {}, }); export function SettingProvider({ children }) { const { data: setting, isLoading, update, reload, } = useStorage(STOKEY_SETTING, DEFAULT_SETTING, KV_SETTING_KEY); useEffect(() => { (async () => { try { logger.setLevel(setting?.logLevel); } catch (error) { logger.error("Failed to fetch log level, using default.", error); } })(); }, [setting]); const updateSetting = useCallback( (objOrFn) => { update(objOrFn); debounceSyncMeta(KV_SETTING_KEY); }, [update] ); const updateChild = useCallback( (key) => async (obj) => { updateSetting((prev) => ({ ...prev, [key]: { ...(prev?.[key] || {}), ...obj }, })); }, [updateSetting] ); const value = useMemo( () => ({ setting, updateSetting, updateChild, reloadSetting: reload, }), [setting, updateSetting, updateChild, reload] ); if (isLoading) { return ; } if (!setting) {

数据加载出错,请刷新页面或卸载后重新安装。

Data loading error, please refresh the page or uninstall and reinstall.

; } return ( {children} ); } /** * 设置 hook * @returns */ export function useSetting() { return useContext(SettingContext); }