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
数据加载出错,请刷新页面或卸载后重新安装。
Data loading error, please refresh the page or uninstall and reinstall.