diff --git a/src/hooks/Rules.js b/src/hooks/Rules.js
index e436de8..ec09d3b 100644
--- a/src/hooks/Rules.js
+++ b/src/hooks/Rules.js
@@ -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]
diff --git a/src/views/Options/Rules.js b/src/views/Options/Rules.js
index a13406b..b9c605a 100644
--- a/src/views/Options/Rules.js
+++ b/src/views/Options/Rules.js
@@ -875,9 +875,9 @@ function UserRules({ subRules, rules }) {
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`}
/>
JSON.stringify(await getRulesOld(), null, 2)}
diff --git a/src/views/Options/Setting.js b/src/views/Options/Setting.js
index bb60062..d75dabc 100644
--- a/src/views/Options/Setting.js
+++ b/src/views/Options/Setting.js
@@ -124,7 +124,7 @@ export default function Settings() {
JSON.stringify(setting, null, 2)}
text={i18n("export")}
- fileName={`kiss-setting_${Date.now()}.json`}
+ fileName={`kiss-setting_v2_${Date.now()}.json`}
/>