fix: merge rules

This commit is contained in:
Gabe
2025-10-16 20:58:27 +08:00
parent 56d4733e2a
commit 573865cf10
3 changed files with 24 additions and 17 deletions

View File

@@ -48,11 +48,7 @@ export function useRules() {
const put = useCallback(
(pattern, obj) => {
save((prev) => {
if (
prev.some(
(item) => item.pattern === obj.pattern && item.pattern !== pattern
)
) {
if (pattern !== obj.pattern) {
return prev;
}
return prev.map((item) =>
@@ -71,15 +67,26 @@ export function useRules() {
return prev;
}
const map = new Map();
// 不进行深度合并
// [...prev, ...adds].forEach((item) => {
// const k = item.pattern;
// map.set(k, { ...(map.get(k) || {}), ...item });
// });
prev.forEach((item) => map.set(item.pattern, item));
adds.forEach((item) => map.set(item.pattern, item));
return [...map.values()];
// const map = new Map();
// // 不进行深度合并
// // [...prev, ...adds].forEach((item) => {
// // const k = item.pattern;
// // map.set(k, { ...(map.get(k) || {}), ...item });
// // });
// prev.forEach((item) => map.set(item.pattern, item));
// adds.forEach((item) => map.set(item.pattern, item));
// return [...map.values()];
const addsMap = new Map(adds.map((item) => [item.pattern, item]));
const prevPatterns = new Set(prev.map((item) => item.pattern));
const updatedPrev = prev.map(
(prevItem) => addsMap.get(prevItem.pattern) || prevItem
);
const newItems = adds.filter(
(addItem) => !prevPatterns.has(addItem.pattern)
);
return [...newItems, ...updatedPrev];
});
},
[save]

View File

@@ -875,9 +875,9 @@ function UserRules({ subRules, rules }) {
<UploadButton text={i18n("import")} handleImport={handleImport} />
<DownloadButton
handleData={() => JSON.stringify([...rules.list].reverse(), null, 2)}
handleData={() => JSON.stringify([...rules.list], null, 2)}
text={i18n("export")}
fileName={`kiss-rules_${Date.now()}.json`}
fileName={`kiss-rules_v2_${Date.now()}.json`}
/>
<DownloadButton
handleData={async () => JSON.stringify(await getRulesOld(), null, 2)}

View File

@@ -124,7 +124,7 @@ export default function Settings() {
<DownloadButton
handleData={() => JSON.stringify(setting, null, 2)}
text={i18n("export")}
fileName={`kiss-setting_${Date.now()}.json`}
fileName={`kiss-setting_v2_${Date.now()}.json`}
/>
<DownloadButton
handleData={async () =>