Files
kiss-translator/src/hooks/Setting.js

56 lines
1.1 KiB
JavaScript
Raw Normal View History

2023-08-30 18:05:37 +08:00
import { STOKEY_SETTING, DEFAULT_SETTING } from "../config";
import { useStorage } from "./Storage";
2023-08-26 14:31:13 +08:00
import { trySyncSetting } from "../libs/sync";
2023-09-01 16:39:57 +08:00
import { createContext, useCallback, useContext, useMemo } from "react";
import { debounce } from "../libs/utils";
2023-07-20 13:45:41 +08:00
2023-08-30 18:05:37 +08:00
const SettingContext = createContext({
2023-09-17 21:50:17 +08:00
setting: null,
2023-08-30 18:05:37 +08:00
updateSetting: async () => {},
2023-09-01 10:15:57 +08:00
reloadSetting: async () => {},
2023-08-30 18:05:37 +08:00
});
export function SettingProvider({ children }) {
2023-09-17 21:50:17 +08:00
const { data, update, reload } = useStorage(STOKEY_SETTING, DEFAULT_SETTING);
2023-08-30 18:05:37 +08:00
2023-09-01 16:39:57 +08:00
const syncSetting = useMemo(
() =>
debounce(() => {
2023-09-11 11:33:28 +08:00
trySyncSetting(false, true);
2023-09-01 22:27:25 +08:00
}, [2000]),
2023-09-01 16:39:57 +08:00
[]
);
2023-08-30 18:05:37 +08:00
const updateSetting = useCallback(
async (obj) => {
await update(obj);
2023-09-01 16:39:57 +08:00
syncSetting();
2023-08-30 18:05:37 +08:00
},
2023-09-09 19:26:22 +08:00
[update, syncSetting]
2023-08-30 18:05:37 +08:00
);
2023-09-17 21:50:17 +08:00
if (!data) {
2023-09-08 13:53:33 +08:00
return;
}
2023-08-30 18:05:37 +08:00
return (
<SettingContext.Provider
value={{
setting: data,
updateSetting,
2023-09-01 10:15:57 +08:00
reloadSetting: reload,
2023-08-30 18:05:37 +08:00
}}
>
{children}
</SettingContext.Provider>
);
2023-07-20 13:45:41 +08:00
}
/**
2023-08-30 18:05:37 +08:00
* 设置 hook
2023-07-20 13:45:41 +08:00
* @returns
*/
2023-08-30 18:05:37 +08:00
export function useSetting() {
return useContext(SettingContext);
2023-07-20 13:45:41 +08:00
}