1
0
forked from test/crm

fix: handle script load while setting up script

(cherry picked from commit 91f7cf05fc2a13e60ebb29c7703550f046d1d553)
This commit is contained in:
Shariq Ansari 2025-05-26 17:50:24 +05:30 committed by Mergify
parent c583e8044b
commit c7eaef54f0
2 changed files with 47 additions and 13 deletions

View File

@ -14,7 +14,7 @@ export function useDocument(doctype, docname) {
documentsCache[doctype][docname] = createDocumentResource({ documentsCache[doctype][docname] = createDocumentResource({
doctype: doctype, doctype: doctype,
name: docname, name: docname,
onSuccess: () => setupFormScript(), onSuccess: async () => await setupFormScript(),
setValue: { setValue: {
onSuccess: () => { onSuccess: () => {
toast.success(__('Document updated successfully')) toast.success(__('Document updated successfully'))
@ -27,23 +27,49 @@ export function useDocument(doctype, docname) {
}) })
} }
function setupFormScript() { async function setupFormScript() {
if (controllersCache[doctype]?.[docname]) return if (
controllersCache[doctype] &&
typeof controllersCache[doctype][docname] === 'object'
) {
return
}
if (!controllersCache[doctype]) { if (!controllersCache[doctype]) {
controllersCache[doctype] = {} controllersCache[doctype] = {}
} }
controllersCache[doctype][docname] = setupScript( controllersCache[doctype][docname] = {}
documentsCache[doctype][docname],
) const controllersArray = await setupScript(documentsCache[doctype][docname])
if (!controllersArray || controllersArray.length === 0) return
const organizedControllers = {}
for (const controller of controllersArray) {
const controllerKey = controller.constructor.name // e.g., "CRMLead", "CRMProducts"
if (!organizedControllers[controllerKey]) {
organizedControllers[controllerKey] = []
}
organizedControllers[controllerKey].push(controller)
}
controllersCache[doctype][docname] = organizedControllers
} }
function getControllers(row = null) { function getControllers(row = null) {
const _doctype = row?.doctype || doctype const _doctype = row?.doctype || doctype
return (controllersCache[doctype]?.[docname] || []).filter( const controllerKey = _doctype.replace(/\s+/g, '')
(c) => c.constructor.name === _doctype.replace(/\s+/g, ''),
) const docControllers = controllersCache[doctype]?.[docname]
if (
typeof docControllers === 'object' &&
docControllers !== null &&
!Array.isArray(docControllers)
) {
return docControllers[controllerKey] || []
}
return []
} }
async function triggerOnRefresh() { async function triggerOnRefresh() {

View File

@ -20,15 +20,23 @@ export function getScript(doctype, view = 'Form') {
doctypeScripts[doctype][script.name] = script || {} doctypeScripts[doctype][script.name] = script || {}
} }
}, },
onError: (err) => {
console.error(
`Error loading CRM Form Scripts for ${doctype} (view: ${view}):`,
err,
)
},
}) })
if (!doctypeScripts[doctype] && !scripts.loading) { if (!doctypeScripts[doctype] && !scripts.loading) {
scripts.fetch() scripts.fetch()
} }
function setupScript(document, helpers = {}) { async function setupScript(document, helpers = {}) {
let scripts = doctypeScripts[doctype] await scripts.promise
if (!scripts) return null
let scriptDefs = doctypeScripts[doctype]
if (!scriptDefs || Object.keys(scriptDefs).length === 0) return null
const { $dialog, $socket, makeCall } = globalStore() const { $dialog, $socket, makeCall } = globalStore()
@ -42,7 +50,7 @@ export function getScript(doctype, view = 'Form') {
makePhoneCall: makeCall, makePhoneCall: makeCall,
} }
return setupMultipleFormControllers(scripts, document, helpers) return setupMultipleFormControllers(scriptDefs, document, helpers)
} }
function setupMultipleFormControllers(scriptStrings, document, helpers) { function setupMultipleFormControllers(scriptStrings, document, helpers) {