feat: add custom statuses using class based script

(cherry picked from commit 8942bb7e4804553cd882c51d57c3956cdd579b76)
This commit is contained in:
Shariq Ansari 2025-06-06 17:17:11 +05:30 committed by Mergify
parent 2e9c5b1d6f
commit 9c27d3dbc6
5 changed files with 69 additions and 4 deletions

View File

@ -117,6 +117,7 @@ export function getScript(doctype, view = 'Form') {
isChildDoctype = false, isChildDoctype = false,
) { ) {
document.actions = document.actions || [] document.actions = document.actions || []
document.statuses = document.statuses || []
let instance = new FormClass() let instance = new FormClass()
@ -237,6 +238,42 @@ export function getScript(doctype, view = 'Form') {
}, },
}) })
} }
if (
!Object.prototype.hasOwnProperty.call(FormClass.prototype, 'statuses')
) {
Object.defineProperty(FormClass.prototype, 'statuses', {
configurable: true,
enumerable: true,
get() {
if (!this._originalDocumentContext) {
console.warn(
'CRM Script: _originalDocumentContext not found on instance for statuses getter.',
)
return []
}
return this._originalDocumentContext.statuses
},
set(newValue) {
if (!this._originalDocumentContext) {
console.warn(
'CRM Script: _originalDocumentContext not found on instance for statuses setter.',
)
return
}
if (!Array.isArray(newValue)) {
console.warn(
'CRM Script: "statuses" property must be an array. Value was not set.',
newValue,
)
this._originalDocumentContext.statuses = []
return
}
this._originalDocumentContext.statuses = newValue
},
})
}
} }
// utility function to setup a form controller // utility function to setup a form controller

View File

@ -22,7 +22,15 @@
doctype="CRM Deal" doctype="CRM Deal"
/> />
<Dropdown <Dropdown
:options="statusOptions('deal', updateField, deal.data._customStatuses)" :options="
statusOptions(
'deal',
updateField,
document.statuses?.length
? document.statuses
: deal.data._customStatuses,
)
"
> >
<template #default="{ open }"> <template #default="{ open }">
<Button :label="deal.data.status"> <Button :label="deal.data.status">

View File

@ -22,7 +22,15 @@
doctype="CRM Lead" doctype="CRM Lead"
/> />
<Dropdown <Dropdown
:options="statusOptions('lead', updateField, lead.data._customStatuses)" :options="
statusOptions(
'lead',
updateField,
document.statuses?.length
? document.statuses
: lead.data._customStatuses,
)
"
> >
<template #default="{ open }"> <template #default="{ open }">
<Button :label="lead.data.status"> <Button :label="lead.data.status">

View File

@ -11,7 +11,13 @@
<div class="absolute right-0"> <div class="absolute right-0">
<Dropdown <Dropdown
:options=" :options="
statusOptions('deal', updateField, deal.data._customStatuses) statusOptions(
'deal',
updateField,
document.statuses?.length
? document.statuses
: deal.data._customStatuses,
)
" "
> >
<template #default="{ open }"> <template #default="{ open }">

View File

@ -11,7 +11,13 @@
<div class="absolute right-0"> <div class="absolute right-0">
<Dropdown <Dropdown
:options=" :options="
statusOptions('lead', updateField, lead.data._customStatuses) statusOptions(
'lead',
updateField,
document.statuses?.length
? document.statuses
: lead.data._customStatuses,
)
" "
> >
<template #default="{ open }"> <template #default="{ open }">