From f0c7f3da4b735be965936dcc55da25a794aae4bb Mon Sep 17 00:00:00 2001 From: Alexander Vokin Date: Fri, 27 Dec 2024 12:13:08 +0800 Subject: [PATCH 1/7] experiments with children --- src/scripts/Sitemap.js | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/scripts/Sitemap.js b/src/scripts/Sitemap.js index d71a9d6d..c6a7f724 100644 --- a/src/scripts/Sitemap.js +++ b/src/scripts/Sitemap.js @@ -156,9 +156,23 @@ export default class Sitemap { // selector is undefined when creating a new one and delete old one, if it exist if (selector === undefined || selector.type !== selectorData.type) { if (selector) { - this.deleteSelector(selector); + if (selector.canHaveChildSelectors()) { + const children = this.selectors.filter(selectorFromList => + selectorFromList.parentSelectors.includes(selector.uuid) + ); + const newSelector = SelectorList.createSelector(selectorData); + children.forEach(child => { + const parentUuidIndex = child.parentSelectors.indexOf(selector.uuid); + console.log(child.parentSelector); + child.parentSelector[parentUuidIndex] = newSelector.uuid; + }); + selector = newSelector; + } else { + this.deleteSelector(selector); + } + } else { + selector = SelectorList.createSelector(selectorData); } - selector = SelectorList.createSelector(selectorData); } // update child selectors From 7b6412ec52bf3a18766e539666571bc4bb075a4d Mon Sep 17 00:00:00 2001 From: Alexander Vokin Date: Fri, 27 Dec 2024 12:39:55 +0800 Subject: [PATCH 2/7] bug fix for updateSelector func --- src/scripts/Sitemap.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/scripts/Sitemap.js b/src/scripts/Sitemap.js index c6a7f724..6cb4dc24 100644 --- a/src/scripts/Sitemap.js +++ b/src/scripts/Sitemap.js @@ -157,18 +157,19 @@ export default class Sitemap { if (selector === undefined || selector.type !== selectorData.type) { if (selector) { if (selector.canHaveChildSelectors()) { + //custom logic: we don’t delete children, but redefined them a parent const children = this.selectors.filter(selectorFromList => selectorFromList.parentSelectors.includes(selector.uuid) ); const newSelector = SelectorList.createSelector(selectorData); children.forEach(child => { const parentUuidIndex = child.parentSelectors.indexOf(selector.uuid); - console.log(child.parentSelector); - child.parentSelector[parentUuidIndex] = newSelector.uuid; + child.parentSelectors[parentUuidIndex] = newSelector.uuid; }); selector = newSelector; } else { this.deleteSelector(selector); + selector = SelectorList.createSelector(selectorData); } } else { selector = SelectorList.createSelector(selectorData); From a05cdda590cd09b922254c81c9a40ef73560e558 Mon Sep 17 00:00:00 2001 From: Alexander Vokin Date: Fri, 31 Jan 2025 17:33:40 +0800 Subject: [PATCH 3/7] add modal dialog window for update selector --- src/_locales/en/messages.json | 12 +++++++ src/scripts/Controller.js | 67 ++++++++++++++++++++++++++++++++++- src/scripts/Sitemap.js | 8 +++-- 3 files changed, 84 insertions(+), 3 deletions(-) diff --git a/src/_locales/en/messages.json b/src/_locales/en/messages.json index b2da4b8c..2c88bbde 100644 --- a/src/_locales/en/messages.json +++ b/src/_locales/en/messages.json @@ -355,13 +355,25 @@ "modal_confirm_action_title_delete_selector": { "message": "Are you sure you want to delete selector ?" }, + "modal_confirm_action_title_update_selector": { + "message": "Новый тип селектора не поддерживает дочерние селекторы. Удалить существующие дочерние селекторы?" + }, + "modal_confirm_action_title_update_selector_can_have_child": { + "message": "Новый тип селектора поддерживает дочерние селекторы. Удалить или сохранить существующие дочерние селекторы?" + }, "modal_confirm_action_title_delete_sitemap": { "message": "Are you sure you want to delete sitemap ?" }, "modal_confirm_action_message_delete_selector": { "message": "The following selectors will be removed ( obj):" }, + "modal_confirm_action_message_update_selector": { + "message": "Дочерние селекторы ( obj):" + }, "modal_confirm_action_submit_delete_selector": { "message": "Confirm" }, + "modal_confirm_action_submit_update_selector": { "message": "Удалить селекторы" }, + "modal_confirm_action_submit_update_save_selector": { "message": "Сохранить селекторы" }, + "modal_confirm_action_cancel_update_selector": { "message": "Cancel" }, "modal_confirm_action_cancel_delete_selector": { "message": "Cancel" }, "modal_confirm_action_submit_delete_sitemap": { "message": "Confirm" }, "modal_confirm_action_cancel_delete_sitemap": { "message": "Cancel" }, diff --git a/src/scripts/Controller.js b/src/scripts/Controller.js index 00215e25..09b44b3d 100644 --- a/src/scripts/Controller.js +++ b/src/scripts/Controller.js @@ -199,6 +199,12 @@ export default class SitemapController { '.delete_selector_submit': { click: this.confirmDeleteSelector, }, + '.update_selector_submit': { + click: this.confirmDeleteChildSelectors, + }, + '#modal-save-child-selectors': { + click: this.confirmSaveChildSelectors, + }, '.delete_sitemap_submit': { click: this.confirmDeleteSitemap, }, @@ -1384,6 +1390,38 @@ export default class SitemapController { const validator = this.getFormValidator(); validator.revalidateField('id'); // cancel submit if invalid form + if (selector.canHaveChildSelectors()) { + const children = sitemap.selectors.filter(selectorFromList => + selectorFromList.parentSelectors.includes(selector.uuid) + ); + if (children.length > 0) { + this.initConfirmActionPanel({ action: 'update_selector' }); + if (newSelector.canHaveChildSelectors()) { + const saveSelectorsBtn = $('