fix: merge rules
This commit is contained in:
@@ -48,11 +48,7 @@ export function useRules() {
|
|||||||
const put = useCallback(
|
const put = useCallback(
|
||||||
(pattern, obj) => {
|
(pattern, obj) => {
|
||||||
save((prev) => {
|
save((prev) => {
|
||||||
if (
|
if (pattern !== obj.pattern) {
|
||||||
prev.some(
|
|
||||||
(item) => item.pattern === obj.pattern && item.pattern !== pattern
|
|
||||||
)
|
|
||||||
) {
|
|
||||||
return prev;
|
return prev;
|
||||||
}
|
}
|
||||||
return prev.map((item) =>
|
return prev.map((item) =>
|
||||||
@@ -71,15 +67,26 @@ export function useRules() {
|
|||||||
return prev;
|
return prev;
|
||||||
}
|
}
|
||||||
|
|
||||||
const map = new Map();
|
// const map = new Map();
|
||||||
// 不进行深度合并
|
// // 不进行深度合并
|
||||||
// [...prev, ...adds].forEach((item) => {
|
// // [...prev, ...adds].forEach((item) => {
|
||||||
// const k = item.pattern;
|
// // const k = item.pattern;
|
||||||
// map.set(k, { ...(map.get(k) || {}), ...item });
|
// // map.set(k, { ...(map.get(k) || {}), ...item });
|
||||||
// });
|
// // });
|
||||||
prev.forEach((item) => map.set(item.pattern, item));
|
// prev.forEach((item) => map.set(item.pattern, item));
|
||||||
adds.forEach((item) => map.set(item.pattern, item));
|
// adds.forEach((item) => map.set(item.pattern, item));
|
||||||
return [...map.values()];
|
// 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]
|
[save]
|
||||||
|
|||||||
@@ -875,9 +875,9 @@ function UserRules({ subRules, rules }) {
|
|||||||
|
|
||||||
<UploadButton text={i18n("import")} handleImport={handleImport} />
|
<UploadButton text={i18n("import")} handleImport={handleImport} />
|
||||||
<DownloadButton
|
<DownloadButton
|
||||||
handleData={() => JSON.stringify([...rules.list].reverse(), null, 2)}
|
handleData={() => JSON.stringify([...rules.list], null, 2)}
|
||||||
text={i18n("export")}
|
text={i18n("export")}
|
||||||
fileName={`kiss-rules_${Date.now()}.json`}
|
fileName={`kiss-rules_v2_${Date.now()}.json`}
|
||||||
/>
|
/>
|
||||||
<DownloadButton
|
<DownloadButton
|
||||||
handleData={async () => JSON.stringify(await getRulesOld(), null, 2)}
|
handleData={async () => JSON.stringify(await getRulesOld(), null, 2)}
|
||||||
|
|||||||
@@ -124,7 +124,7 @@ export default function Settings() {
|
|||||||
<DownloadButton
|
<DownloadButton
|
||||||
handleData={() => JSON.stringify(setting, null, 2)}
|
handleData={() => JSON.stringify(setting, null, 2)}
|
||||||
text={i18n("export")}
|
text={i18n("export")}
|
||||||
fileName={`kiss-setting_${Date.now()}.json`}
|
fileName={`kiss-setting_v2_${Date.now()}.json`}
|
||||||
/>
|
/>
|
||||||
<DownloadButton
|
<DownloadButton
|
||||||
handleData={async () =>
|
handleData={async () =>
|
||||||
|
|||||||
Reference in New Issue
Block a user