dev......
This commit is contained in:
@@ -1,47 +1,81 @@
|
||||
import { DEFAULT_SUBRULES_LIST } from "../config";
|
||||
import { useSetting } from "./Setting";
|
||||
import { useCallback } from "react";
|
||||
import { useCallback, useEffect, useMemo, useState } from "react";
|
||||
import { loadOrFetchSubRules } from "../libs/subRules";
|
||||
import { delSubRules } from "../libs/storage";
|
||||
|
||||
/**
|
||||
* 订阅规则
|
||||
* @returns
|
||||
*/
|
||||
export function useSubRules() {
|
||||
const { data: setting, update: updateSetting } = useSetting();
|
||||
const list = setting?.subRulesList || DEFAULT_SUBRULES_LIST;
|
||||
const [loading, setLoading] = useState(false);
|
||||
const [selectedRules, setSelectedRules] = useState([]);
|
||||
const { setting, updateSetting } = useSetting();
|
||||
const list = setting?.subrulesList || DEFAULT_SUBRULES_LIST;
|
||||
|
||||
const select = useCallback(
|
||||
const selectedSub = useMemo(() => list.find((item) => item.selected), [list]);
|
||||
const selectedUrl = selectedSub.url;
|
||||
|
||||
const selectSub = useCallback(
|
||||
async (url) => {
|
||||
const subRulesList = [...list];
|
||||
subRulesList.forEach((item) => {
|
||||
const subrulesList = [...list];
|
||||
subrulesList.forEach((item) => {
|
||||
if (item.url === url) {
|
||||
item.selected = true;
|
||||
} else {
|
||||
item.selected = false;
|
||||
}
|
||||
});
|
||||
await updateSetting({ subRulesList });
|
||||
await updateSetting({ subrulesList });
|
||||
},
|
||||
[list]
|
||||
[list, updateSetting]
|
||||
);
|
||||
|
||||
const add = useCallback(
|
||||
const addSub = useCallback(
|
||||
async (url) => {
|
||||
const subRulesList = [...list];
|
||||
subRulesList.push({ url, selected: false });
|
||||
await updateSetting({ subRulesList });
|
||||
const subrulesList = [...list];
|
||||
subrulesList.push({ url, selected: false });
|
||||
await updateSetting({ subrulesList });
|
||||
},
|
||||
[list]
|
||||
[list, updateSetting]
|
||||
);
|
||||
|
||||
const del = useCallback(
|
||||
const delSub = useCallback(
|
||||
async (url) => {
|
||||
let subRulesList = [...list];
|
||||
subRulesList = subRulesList.filter((item) => item.url !== url);
|
||||
await updateSetting({ subRulesList });
|
||||
let subrulesList = [...list];
|
||||
subrulesList = subrulesList.filter((item) => item.url !== url);
|
||||
await updateSetting({ subrulesList });
|
||||
await delSubRules(url);
|
||||
},
|
||||
[list]
|
||||
[list, updateSetting]
|
||||
);
|
||||
|
||||
return { list, select, add, del };
|
||||
useEffect(() => {
|
||||
(async () => {
|
||||
if (selectedUrl) {
|
||||
try {
|
||||
setLoading(true);
|
||||
const rules = await loadOrFetchSubRules(selectedUrl);
|
||||
setSelectedRules(rules);
|
||||
} catch (err) {
|
||||
console.log("[loadOrFetchSubRules]", err);
|
||||
} finally {
|
||||
setLoading(false);
|
||||
}
|
||||
}
|
||||
})();
|
||||
}, [selectedUrl]);
|
||||
|
||||
return {
|
||||
subList: list,
|
||||
selectSub,
|
||||
addSub,
|
||||
delSub,
|
||||
selectedSub,
|
||||
selectedUrl,
|
||||
selectedRules,
|
||||
setSelectedRules,
|
||||
loading,
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user