This commit is contained in:
Gabe Yuan
2023-09-20 17:47:23 +08:00
parent 01ebc184ad
commit 489bc9534b
10 changed files with 117 additions and 153 deletions

View File

@@ -1,8 +1,9 @@
import { STOKEY_RULES, DEFAULT_RULES } from "../config";
import { STOKEY_RULES, DEFAULT_RULES, KV_RULES_KEY } from "../config";
import { useStorage } from "./Storage";
import { trySyncRules } from "../libs/sync";
import { checkRules } from "../libs/rules";
import { useCallback } from "react";
import { useSyncMeta } from "./Sync";
/**
* 规则 hook
@@ -10,13 +11,15 @@ import { useCallback } from "react";
*/
export function useRules() {
const { data: list, save } = useStorage(STOKEY_RULES, DEFAULT_RULES);
const { updateSyncMeta } = useSyncMeta();
const updateRules = useCallback(
async (rules) => {
await save(rules);
trySyncRules(false, true);
await updateSyncMeta(KV_RULES_KEY);
trySyncRules();
},
[save]
[save, updateSyncMeta]
);
const add = useCallback(

View File

@@ -1,8 +1,9 @@
import { STOKEY_SETTING, DEFAULT_SETTING } from "../config";
import { STOKEY_SETTING, DEFAULT_SETTING, KV_SETTING_KEY } from "../config";
import { useStorage } from "./Storage";
import { trySyncSetting } from "../libs/sync";
import { createContext, useCallback, useContext, useMemo } from "react";
import { debounce } from "../libs/utils";
import { useSyncMeta } from "./Sync";
const SettingContext = createContext({
setting: null,
@@ -12,11 +13,12 @@ const SettingContext = createContext({
export function SettingProvider({ children }) {
const { data, update, reload } = useStorage(STOKEY_SETTING, DEFAULT_SETTING);
const { updateSyncMeta } = useSyncMeta();
const syncSetting = useMemo(
() =>
debounce(() => {
trySyncSetting(false, true);
trySyncSetting();
}, [2000]),
[]
);
@@ -24,9 +26,10 @@ export function SettingProvider({ children }) {
const updateSetting = useCallback(
async (obj) => {
await update(obj);
await updateSyncMeta(KV_SETTING_KEY);
syncSetting();
},
[update, syncSetting]
[update, syncSetting, updateSyncMeta]
);
if (!data) {

View File

@@ -11,6 +11,23 @@ export function useSync() {
return { sync: data, updateSync: update, reloadSync: reload };
}
/**
* update syncmeta hook
* @returns
*/
export function useSyncMeta() {
const { sync, updateSync } = useSync();
const updateSyncMeta = useCallback(
async (key) => {
const syncMeta = sync?.syncMeta || {};
syncMeta[key] = { ...(syncMeta[key] || {}), updateAt: Date.now() };
await updateSync({ syncMeta });
},
[sync, updateSync]
);
return { updateSyncMeta };
}
/**
* caches sync hook
* @param {*} url