From 9b315c2e0ccb431e44e5d48963214e058711eb15 Mon Sep 17 00:00:00 2001 From: Shariq Ansari Date: Wed, 2 Jul 2025 14:10:14 +0530 Subject: [PATCH] refactor: statusOptions code (cherry picked from commit 881126c7f1145fb2db1143b63c1e0f2f81ebb2ea) --- frontend/src/pages/Deal.vue | 12 +++++++++--- frontend/src/pages/Lead.vue | 12 +++++++++--- frontend/src/pages/MobileDeal.vue | 12 +++++++++--- frontend/src/pages/MobileLead.vue | 12 +++++++++--- frontend/src/stores/statuses.js | 16 ++-------------- 5 files changed, 38 insertions(+), 26 deletions(-) diff --git a/frontend/src/pages/Deal.vue b/frontend/src/pages/Deal.vue index c21400f6..baaf0a53 100644 --- a/frontend/src/pages/Deal.vue +++ b/frontend/src/pages/Deal.vue @@ -26,9 +26,10 @@ :options=" statusOptions( 'deal', - document, - deal.data._customStatuses, - triggerOnChange, + document.statuses?.length + ? document.statuses + : deal.data._customStatuses, + triggerStatusChange, ) " > @@ -755,6 +756,11 @@ const { assignees, document, triggerOnChange } = useDocument( props.dealId, ) +async function triggerStatusChange(value) { + await triggerOnChange('status', value) + document.save.submit() +} + function reloadAssignees(data) { if (data?.hasOwnProperty('deal_owner')) { assignees.reload() diff --git a/frontend/src/pages/Lead.vue b/frontend/src/pages/Lead.vue index 1b830319..16b74414 100644 --- a/frontend/src/pages/Lead.vue +++ b/frontend/src/pages/Lead.vue @@ -26,9 +26,10 @@ :options=" statusOptions( 'lead', - document, - lead.data._customStatuses, - triggerOnChange, + document.statuses?.length + ? document.statuses + : lead.data._customStatuses, + triggerStatusChange, ) " > @@ -320,6 +321,11 @@ const { triggerOnChange, assignees, document } = useDocument( props.leadId, ) +async function triggerStatusChange(value) { + await triggerOnChange('status', value) + document.save.submit() +} + const lead = createResource({ url: 'crm.fcrm.doctype.crm_lead.api.get_lead', params: { name: props.leadId }, diff --git a/frontend/src/pages/MobileDeal.vue b/frontend/src/pages/MobileDeal.vue index 1920266f..1039b387 100644 --- a/frontend/src/pages/MobileDeal.vue +++ b/frontend/src/pages/MobileDeal.vue @@ -14,9 +14,10 @@ :options=" statusOptions( 'deal', - document, - deal.data._customStatuses, - triggerOnChange, + document.statuses?.length + ? document.statuses + : deal.data._customStatuses, + triggerStatusChange, ) " > @@ -624,6 +625,11 @@ const { assignees, document, triggerOnChange } = useDocument( props.dealId, ) +async function triggerStatusChange(value) { + await triggerOnChange('status', value) + document.save.submit() +} + function reloadAssignees(data) { if (data?.hasOwnProperty('deal_owner')) { assignees.reload() diff --git a/frontend/src/pages/MobileLead.vue b/frontend/src/pages/MobileLead.vue index 21743037..0a83e0ec 100644 --- a/frontend/src/pages/MobileLead.vue +++ b/frontend/src/pages/MobileLead.vue @@ -14,9 +14,10 @@ :options=" statusOptions( 'lead', - document, - lead.data._customStatuses, - triggerOnChange, + document.statuses?.length + ? document.statuses + : lead.data._customStatuses, + triggerStatusChange, ) " > @@ -473,6 +474,11 @@ const { assignees, document, triggerOnChange } = useDocument( props.leadId, ) +async function triggerStatusChange(value) { + await triggerOnChange('status', value) + document.save.submit() +} + function reloadAssignees(data) { if (data?.hasOwnProperty('lead_owner')) { assignees.reload() diff --git a/frontend/src/stores/statuses.js b/frontend/src/stores/statuses.js index 0bcdbf3d..637c8d2f 100644 --- a/frontend/src/stores/statuses.js +++ b/frontend/src/stores/statuses.js @@ -77,19 +77,10 @@ export const statusesStore = defineStore('crm-statuses', () => { return communicationStatuses[name] } - function statusOptions( - doctype, - document, - statuses = [], - triggerOnChange = null, - ) { + function statusOptions(doctype, statuses = [], triggerStatusChange = null) { let statusesByName = doctype == 'deal' ? dealStatusesByName : leadStatusesByName - if (document?.statuses?.length) { - statuses = document.statuses - } - if (statuses?.length) { statusesByName = statuses.reduce((acc, status) => { acc[status] = statusesByName[status] @@ -104,11 +95,8 @@ export const statusesStore = defineStore('crm-statuses', () => { value: statusesByName[status]?.name, icon: () => h(IndicatorIcon, { class: statusesByName[status]?.color }), onClick: async () => { + await triggerStatusChange?.(statusesByName[status]?.name) capture('status_changed', { doctype, status }) - if (document) { - await triggerOnChange?.('status', statusesByName[status]?.name) - document.save.submit() - } }, }) }