fix: handle controllers for new document

(cherry picked from commit 3b73432d8cd8a49b8d0978575ce1d496ec760d20)
This commit is contained in:
Shariq Ansari 2025-06-04 12:49:14 +05:30 committed by Mergify
parent 87f50edefe
commit 3d48e12744

View File

@ -1,6 +1,7 @@
import { getScript } from '@/data/script' import { getScript } from '@/data/script'
import { runSequentially } from '@/utils' import { runSequentially } from '@/utils'
import { createDocumentResource, toast } from 'frappe-ui' import { createDocumentResource, toast } from 'frappe-ui'
import { reactive } from 'vue'
const documentsCache = {} const documentsCache = {}
const controllersCache = {} const controllersCache = {}
@ -10,27 +11,34 @@ export function useDocument(doctype, docname) {
documentsCache[doctype] = documentsCache[doctype] || {} documentsCache[doctype] = documentsCache[doctype] || {}
if (!documentsCache[doctype][docname]) { if (!documentsCache[doctype][docname || '']) {
documentsCache[doctype][docname] = createDocumentResource({ if (docname) {
doctype: doctype, documentsCache[doctype][docname] = createDocumentResource({
name: docname, doctype: doctype,
onSuccess: async () => await setupFormScript(), name: docname,
setValue: { onSuccess: async () => await setupFormScript(),
onSuccess: () => { setValue: {
toast.success(__('Document updated successfully')) onSuccess: () => {
toast.success(__('Document updated successfully'))
},
onError: (err) => {
toast.error(__('Error updating document'))
console.error(err)
},
}, },
onError: (err) => { })
toast.error(__('Error updating document')) } else {
console.error(err) documentsCache[doctype][''] = reactive({
}, doc: {},
}, })
}) setupFormScript()
}
} }
async function setupFormScript() { async function setupFormScript() {
if ( if (
controllersCache[doctype] && controllersCache[doctype] &&
typeof controllersCache[doctype][docname] === 'object' typeof controllersCache[doctype][docname || ''] === 'object'
) { ) {
return return
} }
@ -39,9 +47,11 @@ export function useDocument(doctype, docname) {
controllersCache[doctype] = {} controllersCache[doctype] = {}
} }
controllersCache[doctype][docname] = {} controllersCache[doctype][docname || ''] = {}
const controllersArray = await setupScript(documentsCache[doctype][docname]) const controllersArray = await setupScript(
documentsCache[doctype][docname || ''],
)
if (!controllersArray || controllersArray.length === 0) return if (!controllersArray || controllersArray.length === 0) return
@ -53,14 +63,14 @@ export function useDocument(doctype, docname) {
} }
organizedControllers[controllerKey].push(controller) organizedControllers[controllerKey].push(controller)
} }
controllersCache[doctype][docname] = organizedControllers controllersCache[doctype][docname || ''] = organizedControllers
} }
function getControllers(row = null) { function getControllers(row = null) {
const _doctype = row?.doctype || doctype const _doctype = row?.doctype || doctype
const controllerKey = _doctype.replace(/\s+/g, '') const controllerKey = _doctype.replace(/\s+/g, '')
const docControllers = controllersCache[doctype]?.[docname] const docControllers = controllersCache[doctype]?.[docname || '']
if ( if (
typeof docControllers === 'object' && typeof docControllers === 'object' &&
@ -86,7 +96,7 @@ export function useDocument(doctype, docname) {
this.value = row[fieldname] this.value = row[fieldname]
this.oldValue = getOldValue(fieldname, row) this.oldValue = getOldValue(fieldname, row)
} else { } else {
this.value = documentsCache[doctype][docname].doc[fieldname] this.value = documentsCache[doctype][docname || ''].doc[fieldname]
this.oldValue = getOldValue(fieldname) this.oldValue = getOldValue(fieldname)
} }
await this[fieldname]?.() await this[fieldname]?.()
@ -151,9 +161,9 @@ export function useDocument(doctype, docname) {
} }
function getOldValue(fieldname, row) { function getOldValue(fieldname, row) {
if (!documentsCache[doctype][docname]) return '' if (!documentsCache[doctype][docname || '']) return ''
const document = documentsCache[doctype][docname] const document = documentsCache[doctype][docname || '']
const oldDoc = document.originalDoc const oldDoc = document.originalDoc
if (row?.name) { if (row?.name) {
@ -166,7 +176,7 @@ export function useDocument(doctype, docname) {
} }
return { return {
document: documentsCache[doctype][docname], document: documentsCache[doctype][docname || ''],
triggerOnChange, triggerOnChange,
triggerOnRowAdd, triggerOnRowAdd,
triggerOnRowRemove, triggerOnRowRemove,