From 7d79cbf5bdd664e76fb90b994d0d4f5c257c0ed0 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Wed, 11 Jun 2025 14:18:25 +0530 Subject: [PATCH] fix: update and reset value in triggerOnChange method --- frontend/src/components/Controls/Grid.vue | 3 +-- frontend/src/components/FieldLayout/Field.vue | 6 ++---- frontend/src/components/SidePanelLayout.vue | 4 +--- frontend/src/data/document.js | 20 ++++++++++++------- 4 files changed, 17 insertions(+), 16 deletions(-) diff --git a/frontend/src/components/Controls/Grid.vue b/frontend/src/components/Controls/Grid.vue index 54bc29dc..19240a86 100644 --- a/frontend/src/components/Controls/Grid.vue +++ b/frontend/src/components/Controls/Grid.vue @@ -509,8 +509,7 @@ const deleteRows = () => { } function fieldChange(value, field, row) { - row[field.fieldname] = value - triggerOnChange(field.fieldname, row) + triggerOnChange(field.fieldname, value, row) } function getDefaultValue(defaultValue, fieldtype) { diff --git a/frontend/src/components/FieldLayout/Field.vue b/frontend/src/components/FieldLayout/Field.vue index b517d973..07f530cd 100644 --- a/frontend/src/components/FieldLayout/Field.vue +++ b/frontend/src/components/FieldLayout/Field.vue @@ -332,12 +332,10 @@ const getPlaceholder = (field) => { } function fieldChange(value, df) { - data.value[df.fieldname] = value - if (isGridRow) { - triggerOnChange(df.fieldname, data.value) + triggerOnChange(df.fieldname, value, data.value) } else { - triggerOnChange(df.fieldname) + triggerOnChange(df.fieldname, value) } } diff --git a/frontend/src/components/SidePanelLayout.vue b/frontend/src/components/SidePanelLayout.vue index 3fe8fd1a..b9512b46 100644 --- a/frontend/src/components/SidePanelLayout.vue +++ b/frontend/src/components/SidePanelLayout.vue @@ -489,9 +489,7 @@ function parsedField(field) { async function fieldChange(value, df) { if (props.preview) return - document.doc[df.fieldname] = value - - await triggerOnChange(df.fieldname) + await triggerOnChange(df.fieldname, value) document.save.submit(null, { onSuccess: () => { diff --git a/frontend/src/data/document.js b/frontend/src/data/document.js index 7d456676..76e35a9e 100644 --- a/frontend/src/data/document.js +++ b/frontend/src/data/document.js @@ -117,20 +117,26 @@ export function useDocument(doctype, docname) { await trigger(handler) } - async function triggerOnChange(fieldname, row) { + async function triggerOnChange(fieldname, value, row) { + const oldValue = documentsCache[doctype][docname || ''].doc[fieldname] + documentsCache[doctype][docname || ''].doc[fieldname] = value + const handler = async function () { + this.value = value + this.oldValue = oldValue if (row) { this.currentRowIdx = row.idx - this.value = row[fieldname] - this.oldValue = getOldValue(fieldname, row) - } else { - this.value = documentsCache[doctype][docname || ''].doc[fieldname] - this.oldValue = getOldValue(fieldname) } await this[fieldname]?.() } - await trigger(handler, row) + try { + await trigger(handler, row) + } catch (error) { + documentsCache[doctype][docname || ''].doc[fieldname] = oldValue + console.error(handler) + throw error + } } async function triggerOnRowAdd(row) {