59 lines
1.4 KiB
JavaScript
59 lines
1.4 KiB
JavaScript
import { STOKEY_WFRULES, KV_WFRULES_KEY } from "../config";
|
|
import { useStorage } from "./Storage";
|
|
import { trySyncWebfixRules } from "../libs/sync";
|
|
import { useCallback } from "react";
|
|
import { useSyncMeta } from "./Sync";
|
|
|
|
const DEFAULT_WFRULES = [];
|
|
|
|
/**
|
|
* 修复规则 hook
|
|
* @returns
|
|
*/
|
|
export function useWebfixRules() {
|
|
const { data: list, save } = useStorage(STOKEY_WFRULES, DEFAULT_WFRULES);
|
|
const { updateSyncMeta } = useSyncMeta();
|
|
|
|
const updateRules = useCallback(
|
|
async (rules) => {
|
|
await save(rules);
|
|
await updateSyncMeta(KV_WFRULES_KEY);
|
|
trySyncWebfixRules();
|
|
},
|
|
[save, updateSyncMeta]
|
|
);
|
|
|
|
const add = useCallback(
|
|
async (rule) => {
|
|
const rules = [...list];
|
|
if (rules.map((item) => item.pattern).includes(rule.pattern)) {
|
|
return;
|
|
}
|
|
rules.unshift(rule);
|
|
await updateRules(rules);
|
|
},
|
|
[list, updateRules]
|
|
);
|
|
|
|
const del = useCallback(
|
|
async (pattern) => {
|
|
let rules = [...list];
|
|
rules = rules.filter((item) => item.pattern !== pattern);
|
|
await updateRules(rules);
|
|
},
|
|
[list, updateRules]
|
|
);
|
|
|
|
const put = useCallback(
|
|
async (pattern, obj) => {
|
|
const rules = [...list];
|
|
const rule = rules.find((r) => r.pattern === pattern);
|
|
rule && Object.assign(rule, obj);
|
|
await updateRules(rules);
|
|
},
|
|
[list, updateRules]
|
|
);
|
|
|
|
return { list, add, del, put };
|
|
}
|