diff --git a/frontend/src/data/script.js b/frontend/src/data/script.js index 9532fc11..78c22be6 100644 --- a/frontend/src/data/script.js +++ b/frontend/src/data/script.js @@ -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 diff --git a/frontend/src/pages/Deal.vue b/frontend/src/pages/Deal.vue index d9b29299..67e37d18 100644 --- a/frontend/src/pages/Deal.vue +++ b/frontend/src/pages/Deal.vue @@ -12,6 +12,10 @@ v-if="deal.data._customActions?.length" :actions="deal.data._customActions" /> + +