feat: enhance document handling with error triggering and settings helpers via app

(cherry picked from commit 23a823f2bbca6c21ef32ec55d10339b86c5a1f57)
This commit is contained in:
Shariq Ansari 2025-07-28 16:19:49 +05:30 committed by Mergify
parent bdcd7c5487
commit c9b4bf801d
2 changed files with 25 additions and 5 deletions

View File

@ -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,

View File

@ -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)
}