fix: handle controllers for new document
(cherry picked from commit 3b73432d8cd8a49b8d0978575ce1d496ec760d20)
This commit is contained in:
parent
87f50edefe
commit
3d48e12744
@ -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,
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user