fix: handle script load while setting up script
(cherry picked from commit 91f7cf05fc2a13e60ebb29c7703550f046d1d553)
This commit is contained in:
parent
c583e8044b
commit
c7eaef54f0
@ -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() {
|
||||||
|
|||||||
@ -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) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user