From ef2f197a209738e3ce7decc34a5856e373d0572a Mon Sep 17 00:00:00 2001 From: Roly Gutierrez Date: Mon, 23 Jun 2025 11:11:15 -0400 Subject: [PATCH 1/6] FOUR-24596 It is not possible delete page in screen form even when it has no relation to any page ## Description: erify the deletion of a page with data ## Related Tickets & Packages https://processmaker.atlassian.net/browse/FOUR-24596 --- src/components/vue-form-builder.vue | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/components/vue-form-builder.vue b/src/components/vue-form-builder.vue index 3851ffc48..117021dbd 100644 --- a/src/components/vue-form-builder.vue +++ b/src/components/vue-form-builder.vue @@ -1390,6 +1390,13 @@ export default { )}: ${referencedBy}` ); } + if (index === this.pageDelete) { + throw new Error( + `${this.$t( + "Can not delete this page, it is referenced by" + )}: ${referencedBy}` + ); + } return index > this.pageDelete ? index - 1 : index; }, // Update Record list references From b58863c3115ca32d97d637d1865884deb5bfa8ce Mon Sep 17 00:00:00 2001 From: Roly Gutierrez Date: Mon, 23 Jun 2025 17:25:04 -0400 Subject: [PATCH 2/6] FOUR-24596 Fix observations. --- src/components/vue-form-builder.vue | 50 +++++++++++++++++++++-------- 1 file changed, 36 insertions(+), 14 deletions(-) diff --git a/src/components/vue-form-builder.vue b/src/components/vue-form-builder.vue index 117021dbd..813479893 100644 --- a/src/components/vue-form-builder.vue +++ b/src/components/vue-form-builder.vue @@ -1383,20 +1383,6 @@ export default { }, // This function is used to calculate the new index of the references FormRecordList calcNewIndexForFormRecordList(index, referencedBy, config) { - if (config[this.pageDelete].items.length > 0) { - throw new Error( - `${this.$t( - "Can not delete this page, it is referenced by" - )}: ${referencedBy}` - ); - } - if (index === this.pageDelete) { - throw new Error( - `${this.$t( - "Can not delete this page, it is referenced by" - )}: ${referencedBy}` - ); - } return index > this.pageDelete ? index - 1 : index; }, // Update Record list references @@ -1433,6 +1419,12 @@ export default { }, async deletePage() { const back = _.cloneDeep(this.config); + if(!this.isNotReferenceToFormRecordList()) { + return; + } + if(!this.isNotReferenceToRecordForm()) { + return; + } try { this.updateRecordListReferences(); this.updateNavigationButtonsReferences(); @@ -1453,6 +1445,36 @@ export default { }); this.$store.dispatch("clipboardModule/pushState", this.clipboardPage.items); }, + isNotReferenceToFormRecordList() { + const page = this.config[this.pageDelete]; + for (let j = 0; j < page.items.length; j++) { + const item = page.items[j]; + if (item.component === "FormRecordList") { + const referencedBy = item.config.label; + const message = `${this.$t("Can not delete this page, it is referenced by")}: ${referencedBy}`; + globalObject.ProcessMaker.alert(message, "danger"); + return false; + } + } + return true; + }, + isNotReferenceToRecordForm() { + for (let i = 0; i < this.config.length; i++) { + const page = this.config[i]; + for (let j = 0; j < page.items.length; j++) { + const item = page.items[j]; + if (item.component === "FormRecordList") { + if (Number(item.config.form) === this.pageDelete) { + const referencedBy = item.config.label; + const message = `${this.$t("Can not delete this page, it is referenced by")}: ${referencedBy}`; + globalObject.ProcessMaker.alert(message, "danger"); + return false; + } + } + } + } + return true; + }, inspect(element = {}) { this.closeTemplatesPanel(); this.inspection = element; From 8681e524cf1c5e072009be937ae1b5f13fff195b Mon Sep 17 00:00:00 2001 From: Roly Gutierrez Date: Mon, 23 Jun 2025 17:56:03 -0400 Subject: [PATCH 3/6] FOUR-24596 Fix sonarqube observations. --- src/components/vue-form-builder.vue | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/src/components/vue-form-builder.vue b/src/components/vue-form-builder.vue index 813479893..d6ae1335a 100644 --- a/src/components/vue-form-builder.vue +++ b/src/components/vue-form-builder.vue @@ -1447,8 +1447,7 @@ export default { }, isNotReferenceToFormRecordList() { const page = this.config[this.pageDelete]; - for (let j = 0; j < page.items.length; j++) { - const item = page.items[j]; + for (let item of page.items) { if (item.component === "FormRecordList") { const referencedBy = item.config.label; const message = `${this.$t("Can not delete this page, it is referenced by")}: ${referencedBy}`; @@ -1459,10 +1458,8 @@ export default { return true; }, isNotReferenceToRecordForm() { - for (let i = 0; i < this.config.length; i++) { - const page = this.config[i]; - for (let j = 0; j < page.items.length; j++) { - const item = page.items[j]; + for (let page of this.config) { + for (let item of page.items) { if (item.component === "FormRecordList") { if (Number(item.config.form) === this.pageDelete) { const referencedBy = item.config.label; From 67d07e87908ceebcea1241c002a515d5361df1d4 Mon Sep 17 00:00:00 2001 From: Roly Gutierrez Date: Tue, 24 Jun 2025 09:57:50 -0400 Subject: [PATCH 4/6] FOUR-24596 Fix observation. --- src/components/vue-form-builder.vue | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/components/vue-form-builder.vue b/src/components/vue-form-builder.vue index d6ae1335a..beb8824a9 100644 --- a/src/components/vue-form-builder.vue +++ b/src/components/vue-form-builder.vue @@ -1461,7 +1461,7 @@ export default { for (let page of this.config) { for (let item of page.items) { if (item.component === "FormRecordList") { - if (Number(item.config.form) === this.pageDelete) { + if (item.config.form !== null && Number(item.config.form) === this.pageDelete) { const referencedBy = item.config.label; const message = `${this.$t("Can not delete this page, it is referenced by")}: ${referencedBy}`; globalObject.ProcessMaker.alert(message, "danger"); From 37b60962ff9fb68e7606ecd3ea52df9489ba8643 Mon Sep 17 00:00:00 2001 From: Roly Gutierrez Date: Wed, 25 Jun 2025 11:03:41 -0400 Subject: [PATCH 5/6] FOUR-24596 Fix observations. --- src/components/vue-form-builder.vue | 41 +++++++++++++---------------- 1 file changed, 19 insertions(+), 22 deletions(-) diff --git a/src/components/vue-form-builder.vue b/src/components/vue-form-builder.vue index beb8824a9..49d324aff 100644 --- a/src/components/vue-form-builder.vue +++ b/src/components/vue-form-builder.vue @@ -1382,7 +1382,7 @@ export default { return index > this.pageDelete ? index - 1 : index; }, // This function is used to calculate the new index of the references FormRecordList - calcNewIndexForFormRecordList(index, referencedBy, config) { + calcNewIndexForFormRecordList(index, referencedBy) { return index > this.pageDelete ? index - 1 : index; }, // Update Record list references @@ -1391,11 +1391,12 @@ export default { page.items.forEach((item) => { if (item.component === "FormRecordList") { // eslint-disable-next-line no-param-reassign - item.config.form = this.calcNewIndexForFormRecordList( - item.config.form * 1, - item.config.label, - this.config, - ); + if (Number.isFinite(item.config.form)) { + item.config.form = this.calcNewIndexForFormRecordList( + item.config.form, + item.config.label, + ); + } } }); }); @@ -1419,9 +1420,6 @@ export default { }, async deletePage() { const back = _.cloneDeep(this.config); - if(!this.isNotReferenceToFormRecordList()) { - return; - } if(!this.isNotReferenceToRecordForm()) { return; } @@ -1445,23 +1443,11 @@ export default { }); this.$store.dispatch("clipboardModule/pushState", this.clipboardPage.items); }, - isNotReferenceToFormRecordList() { - const page = this.config[this.pageDelete]; - for (let item of page.items) { - if (item.component === "FormRecordList") { - const referencedBy = item.config.label; - const message = `${this.$t("Can not delete this page, it is referenced by")}: ${referencedBy}`; - globalObject.ProcessMaker.alert(message, "danger"); - return false; - } - } - return true; - }, isNotReferenceToRecordForm() { for (let page of this.config) { for (let item of page.items) { if (item.component === "FormRecordList") { - if (item.config.form !== null && Number(item.config.form) === this.pageDelete) { + if (this.isValidInteger(item.config.form) && Number(item.config.form) === this.pageDelete) { const referencedBy = item.config.label; const message = `${this.$t("Can not delete this page, it is referenced by")}: ${referencedBy}`; globalObject.ProcessMaker.alert(message, "danger"); @@ -1472,6 +1458,17 @@ export default { } return true; }, + isValidInteger(value) { + if (typeof value === 'boolean' || value === null || value === undefined) { + return false; + } + const str = String(value).trim(); + if (str === '') { + return false; + } + const num = Number(str); + return Number.isInteger(num); + }, inspect(element = {}) { this.closeTemplatesPanel(); this.inspection = element; From 00cb222ea218e923ea406a538503617230292f93 Mon Sep 17 00:00:00 2001 From: Roly Gutierrez Date: Wed, 25 Jun 2025 12:10:05 -0400 Subject: [PATCH 6/6] FOUR-24596 Fix observations --- src/components/vue-form-builder.vue | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/vue-form-builder.vue b/src/components/vue-form-builder.vue index 49d324aff..1ec45a266 100644 --- a/src/components/vue-form-builder.vue +++ b/src/components/vue-form-builder.vue @@ -1391,9 +1391,9 @@ export default { page.items.forEach((item) => { if (item.component === "FormRecordList") { // eslint-disable-next-line no-param-reassign - if (Number.isFinite(item.config.form)) { + if (this.isValidInteger(item.config.form)) { item.config.form = this.calcNewIndexForFormRecordList( - item.config.form, + item.config.form * 1, item.config.label, ); }