48 lines
1.1 KiB
JavaScript
48 lines
1.1 KiB
JavaScript
|
|
import { DEFAULT_SUBRULES_LIST } from "../config";
|
||
|
|
import { useSetting } from "./Setting";
|
||
|
|
import { useCallback } from "react";
|
||
|
|
|
||
|
|
/**
|
||
|
|
* 订阅规则
|
||
|
|
* @returns
|
||
|
|
*/
|
||
|
|
export function useSubRules() {
|
||
|
|
const { data: setting, update: updateSetting } = useSetting();
|
||
|
|
const list = setting?.subRulesList || DEFAULT_SUBRULES_LIST;
|
||
|
|
|
||
|
|
const select = useCallback(
|
||
|
|
async (url) => {
|
||
|
|
const subRulesList = [...list];
|
||
|
|
subRulesList.forEach((item) => {
|
||
|
|
if (item.url === url) {
|
||
|
|
item.selected = true;
|
||
|
|
} else {
|
||
|
|
item.selected = false;
|
||
|
|
}
|
||
|
|
});
|
||
|
|
await updateSetting({ subRulesList });
|
||
|
|
},
|
||
|
|
[list]
|
||
|
|
);
|
||
|
|
|
||
|
|
const add = useCallback(
|
||
|
|
async (url) => {
|
||
|
|
const subRulesList = [...list];
|
||
|
|
subRulesList.push({ url, selected: false });
|
||
|
|
await updateSetting({ subRulesList });
|
||
|
|
},
|
||
|
|
[list]
|
||
|
|
);
|
||
|
|
|
||
|
|
const del = useCallback(
|
||
|
|
async (url) => {
|
||
|
|
let subRulesList = [...list];
|
||
|
|
subRulesList = subRulesList.filter((item) => item.url !== url);
|
||
|
|
await updateSetting({ subRulesList });
|
||
|
|
},
|
||
|
|
[list]
|
||
|
|
);
|
||
|
|
|
||
|
|
return { list, select, add, del };
|
||
|
|
}
|