From 23a823f2bbca6c21ef32ec55d10339b86c5a1f57 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Mon, 28 Jul 2025 16:19:49 +0530 Subject: [PATCH] feat: enhance document handling with error triggering and settings helpers via app --- frontend/src/data/document.js | 24 ++++++++++++++++++++++++ frontend/src/data/script.js | 6 +----- 2 files changed, 25 insertions(+), 5 deletions(-) diff --git a/frontend/src/data/document.js b/frontend/src/data/document.js index 44af0a3d..b1d68006 100644 --- a/frontend/src/data/document.js +++ b/frontend/src/data/document.js @@ -1,4 +1,6 @@ import { getScript } from '@/data/script' +import { globalStore } from '@/stores/global' +import { showSettings, activeSettingsPage } from '@/composables/settings' import { runSequentially, parseAssignees } from '@/utils' import { createDocumentResource, createResource, toast } from 'frappe-ui' import { reactive } from 'vue' @@ -24,6 +26,7 @@ export function useDocument(doctype, docname) { toast.success(__('Document updated successfully')) }, onError: (err) => { + triggerOnError(err) let errorMessage = __('Error updating document') if (err.exc_type == 'MandatoryError') { const fieldName = err.messages @@ -76,8 +79,21 @@ export function useDocument(doctype, docname) { controllersCache[doctype][docname || ''] = {} + const { makeCall } = globalStore() + + let helpers = {} + + helpers.crm = { + makePhoneCall: makeCall, + openSettings: (page) => { + showSettings.value = true + activeSettingsPage.value = page + }, + } + const controllersArray = await setupScript( documentsCache[doctype][docname || ''], + helpers, ) if (!controllersArray || controllersArray.length === 0) return @@ -133,6 +149,13 @@ export function useDocument(doctype, docname) { await trigger(handler) } + async function triggerOnError() { + const handler = async function () { + await (this.onError?.() || this.on_error?.()) + } + await trigger(handler) + } + async function triggerOnRefresh() { const handler = async function () { await this.refresh?.() @@ -234,6 +257,7 @@ export function useDocument(doctype, docname) { triggerOnLoad, triggerOnBeforeCreate, triggerOnSave, + triggerOnError, triggerOnRefresh, triggerOnChange, triggerOnRowAdd, diff --git a/frontend/src/data/script.js b/frontend/src/data/script.js index 47185bab..95225590 100644 --- a/frontend/src/data/script.js +++ b/frontend/src/data/script.js @@ -38,7 +38,7 @@ export function getScript(doctype, view = 'Form') { let scriptDefs = doctypeScripts[doctype] if (!scriptDefs || Object.keys(scriptDefs).length === 0) return null - const { $dialog, $socket, makeCall } = globalStore() + const { $dialog, $socket } = globalStore() helpers.createDialog = $dialog helpers.toast = toast @@ -51,10 +51,6 @@ export function getScript(doctype, view = 'Form') { throw new Error(message || __('An error occurred')) } - helpers.crm = { - makePhoneCall: makeCall, - } - return setupMultipleFormControllers(scriptDefs, document, helpers) }