diff --git a/app/appearance/langs/en_US.json b/app/appearance/langs/en_US.json index 9445303a0..d5e049db9 100644 --- a/app/appearance/langs/en_US.json +++ b/app/appearance/langs/en_US.json @@ -1,4 +1,5 @@ { + "searchOverwrite": "The query name is duplicated, do you want to overwrite it?", "onepay": "PRO", "format": "Number format", "numberFormatNone": "Number", diff --git a/app/appearance/langs/es_ES.json b/app/appearance/langs/es_ES.json index a35a05569..50b8d775e 100644 --- a/app/appearance/langs/es_ES.json +++ b/app/appearance/langs/es_ES.json @@ -1,4 +1,5 @@ { + "searchOverwrite": "El nombre de la consulta está duplicado, ¿quieres sobrescribirlo?", "onepay": "PRO", "format": "Formato de número", "numberFormatNone": "Número", diff --git a/app/appearance/langs/fr_FR.json b/app/appearance/langs/fr_FR.json index a2b302280..b8a2f1e10 100644 --- a/app/appearance/langs/fr_FR.json +++ b/app/appearance/langs/fr_FR.json @@ -1,4 +1,5 @@ { + "searchOverwrite": "Le nom de la requête est dupliqué, voulez-vous l'écraser ?", "onepay": "PRO", "format": "Format des nombres", "numberFormatNone": "Numéro", diff --git a/app/appearance/langs/zh_CHT.json b/app/appearance/langs/zh_CHT.json index bd4647dcc..22abec898 100644 --- a/app/appearance/langs/zh_CHT.json +++ b/app/appearance/langs/zh_CHT.json @@ -1,4 +1,5 @@ { + "searchOverwrite": "查詢名稱重複,是否進行覆蓋?", "onepay": "功能特性", "format": "格式化", "numberFormatNone": "數字", diff --git a/app/appearance/langs/zh_CN.json b/app/appearance/langs/zh_CN.json index ff6f8184c..d0d95c7a5 100644 --- a/app/appearance/langs/zh_CN.json +++ b/app/appearance/langs/zh_CN.json @@ -1,4 +1,5 @@ { + "searchOverwrite": "查询名称重复,是否进行覆盖?", "onepay": "功能特性", "format": "格式化", "numberFormatNone": "数字", diff --git a/app/src/search/menu.ts b/app/src/search/menu.ts index 816341fdb..ad084c65b 100644 --- a/app/src/search/menu.ts +++ b/app/src/search/menu.ts @@ -6,6 +6,7 @@ import {showMessage} from "../dialog/message"; import {fetchPost} from "../util/fetch"; import {escapeHtml} from "../util/escape"; import {setStorageVal} from "../protyle/util/compatibility"; +import {confirmDialog} from "../dialog/confirmDialog"; export const filterMenu = (config: ISearchOption, cb: () => void) => { const filterDialog = new Dialog({ @@ -186,9 +187,35 @@ export const queryMenu = (config: ISearchOption, cb: () => void) => { }).element); }; +const saveCriterionData = (config: ISearchOption, + criteriaData: ISearchOption[], + element: Element, + value: string, + saveDialog: Dialog) => { + if (isMobile()) { + config.k = (document.querySelector("#toolbarSearch") as HTMLInputElement).value; + config.r = (element.querySelector("#toolbarReplace") as HTMLInputElement).value; + } else { + config.k = (element.querySelector("#searchInput") as HTMLInputElement).value; + config.r = (element.querySelector("#replaceInput") as HTMLInputElement).value; + } + config.removed = false; + const criterion = config; + criterion.name = value; + criteriaData.push(Object.assign({}, criterion)); + window.siyuan.storage[Constants.LOCAL_SEARCHDATA] = Object.assign({}, config); + setStorageVal(Constants.LOCAL_SEARCHDATA, window.siyuan.storage[Constants.LOCAL_SEARCHDATA]); + fetchPost("/api/storage/setCriterion", {criterion}, () => { + saveDialog.destroy(); + const criteriaElement = element.querySelector("#criteria").firstElementChild; + criteriaElement.querySelector(".b3-chip--current")?.classList.remove("b3-chip--current"); + criteriaElement.insertAdjacentHTML("beforeend", `
${criterion.name}
`); + }); +} + export const saveCriterion = (config: ISearchOption, criteriaData: ISearchOption[], - element: Element,) => { + element: Element) => { const saveDialog = new Dialog({ title: window.siyuan.languages.saveCriterion, content: `
@@ -213,26 +240,30 @@ export const saveCriterion = (config: ISearchOption, showMessage(window.siyuan.languages["_kernel"]["142"]); return; } - if (isMobile()) { - config.k = (document.querySelector("#toolbarSearch") as HTMLInputElement).value; - config.r = (element.querySelector("#toolbarReplace") as HTMLInputElement).value; + const hasSame = criteriaData.find(item => { + if (item.name === value) { + return true; + } + }) + if (hasSame) { + confirmDialog(window.siyuan.languages.confirm, window.siyuan.languages.searchOverwrite, () => { + const criteriaElement = element.querySelector("#criteria").firstElementChild; + Array.from(criteriaElement.children).forEach(item => { + if (item.textContent === value) { + item.remove(); + } + }); + criteriaData.find((item, index) => { + if (item.name === value) { + criteriaData.splice(index, 1); + return true; + } + }); + saveCriterionData(config, criteriaData, element, value, saveDialog); + }); } else { - config.k = (element.querySelector("#searchInput") as HTMLInputElement).value; - config.r = (element.querySelector("#replaceInput") as HTMLInputElement).value; + saveCriterionData(config, criteriaData, element, value, saveDialog); } - config.removed = false; - const criterion = config; - criterion.name = value; - criteriaData.push(Object.assign({}, criterion)); - window.siyuan.storage[Constants.LOCAL_SEARCHDATA] = Object.assign({}, config); - setStorageVal(Constants.LOCAL_SEARCHDATA, window.siyuan.storage[Constants.LOCAL_SEARCHDATA]); - fetchPost("/api/storage/setCriterion", {criterion}, () => { - saveDialog.destroy(); - const criteriaElement = element.querySelector("#criteria"); - criteriaElement.querySelector(".b3-chip--current")?.classList.remove("b3-chip--current"); - criteriaElement.classList.remove("fn__none"); - criteriaElement.firstElementChild.insertAdjacentHTML("beforeend", `
${criterion.name}
`); - }); }); };