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`} />