1
0
forked from test/crm

feat: add custom actions using class based script

(cherry picked from commit ca6067912653f621c4d3f1d4fc53c408952a9aa9)
This commit is contained in:
Shariq Ansari 2025-06-06 16:38:39 +05:30 committed by Mergify
parent a8ee5295b7
commit 2e9c5b1d6f
3 changed files with 46 additions and 0 deletions

View File

@ -116,8 +116,12 @@ export function getScript(doctype, view = 'Form') {
parentInstance = null,
isChildDoctype = false,
) {
document.actions = document.actions || []
let instance = new FormClass()
// Store the original document context to be used by properties like 'actions'
instance._originalDocumentContext = document
instance._isChildDoctype = isChildDoctype
for (const key in document) {
@ -199,6 +203,40 @@ export function getScript(doctype, view = 'Form') {
return createDocProxy(row, this)
}
}
if (!Object.prototype.hasOwnProperty.call(FormClass.prototype, 'actions')) {
Object.defineProperty(FormClass.prototype, 'actions', {
configurable: true,
enumerable: true,
get() {
if (!this._originalDocumentContext) {
console.warn(
'CRM Script: _originalDocumentContext not found on instance for actions getter.',
)
return []
}
return this._originalDocumentContext.actions
},
set(newValue) {
if (!this._originalDocumentContext) {
console.warn(
'CRM Script: _originalDocumentContext not found on instance for actions setter.',
)
return
}
if (!Array.isArray(newValue)) {
console.warn(
'CRM Script: "actions" property must be an array. Value was not set.',
newValue,
)
this._originalDocumentContext.actions = []
return
}
this._originalDocumentContext.actions = newValue
},
})
}
}
// utility function to setup a form controller

View File

@ -12,6 +12,10 @@
v-if="deal.data._customActions?.length"
:actions="deal.data._customActions"
/>
<CustomActions
v-if="document.actions?.length"
:actions="document.actions"
/>
<AssignTo
v-model="assignees.data"
:data="document.doc"

View File

@ -12,6 +12,10 @@
v-if="lead.data._customActions?.length"
:actions="lead.data._customActions"
/>
<CustomActions
v-if="document.actions?.length"
:actions="document.actions"
/>
<AssignTo
v-model="assignees.data"
:data="document.doc"