fix: trigger on change on status change

(cherry picked from commit e9e0aa357b1b1596f57d8bda0037f36514972169)
This commit is contained in:
Shariq Ansari 2025-06-11 14:20:11 +05:30 committed by Mergify
parent 5fff00338a
commit 87a38250f6
7 changed files with 59 additions and 19 deletions

View File

@ -94,7 +94,7 @@ const show = defineModel()
const router = useRouter() const router = useRouter()
const error = ref(null) const error = ref(null)
const { document: deal } = useDocument('CRM Deal') const { document: deal, triggerOnChange } = useDocument('CRM Deal')
const hasOrganizationSections = ref(true) const hasOrganizationSections = ref(true)
const hasContactSections = ref(true) const hasContactSections = ref(true)
@ -164,7 +164,7 @@ const tabs = createResource({
}) })
const dealStatuses = computed(() => { const dealStatuses = computed(() => {
let statuses = statusOptions('deal') let statuses = statusOptions('deal', null, [], triggerOnChange)
if (!deal.doc.status) { if (!deal.doc.status) {
deal.doc.status = statuses[0].value deal.doc.status = statuses[0].value
} }

View File

@ -70,10 +70,10 @@ const router = useRouter()
const error = ref(null) const error = ref(null)
const isLeadCreating = ref(false) const isLeadCreating = ref(false)
const { document: lead } = useDocument('CRM Lead') const { document: lead, triggerOnChange } = useDocument('CRM Lead')
const leadStatuses = computed(() => { const leadStatuses = computed(() => {
let statuses = statusOptions('lead') let statuses = statusOptions('lead', null, [], triggerOnChange)
if (!lead.doc.status) { if (!lead.doc.status) {
lead.doc.status = statuses?.[0]?.value lead.doc.status = statuses?.[0]?.value
} }

View File

@ -23,7 +23,14 @@
/> />
<Dropdown <Dropdown
v-if="document.doc" v-if="document.doc"
:options="statusOptions('deal', document, deal.data._customStatuses)" :options="
statusOptions(
'deal',
document,
deal.data._customStatuses,
triggerOnChange,
)
"
> >
<template #default="{ open }"> <template #default="{ open }">
<Button :label="document.doc.status"> <Button :label="document.doc.status">
@ -726,7 +733,10 @@ function openEmailBox() {
activities.value.emailBox.show = true activities.value.emailBox.show = true
} }
const { assignees, document } = useDocument('CRM Deal', props.dealId) const { assignees, document, triggerOnChange } = useDocument(
'CRM Deal',
props.dealId,
)
function reloadAssignees(data) { function reloadAssignees(data) {
if (data?.hasOwnProperty('deal_owner')) { if (data?.hasOwnProperty('deal_owner')) {

View File

@ -23,7 +23,14 @@
/> />
<Dropdown <Dropdown
v-if="document.doc" v-if="document.doc"
:options="statusOptions('lead', document, lead.data._customStatuses)" :options="
statusOptions(
'lead',
document,
lead.data._customStatuses,
triggerOnChange,
)
"
> >
<template #default="{ open }"> <template #default="{ open }">
<Button :label="document.doc.status"> <Button :label="document.doc.status">
@ -610,10 +617,8 @@ const existingOrganizationChecked = ref(false)
const existingContact = ref('') const existingContact = ref('')
const existingOrganization = ref('') const existingOrganization = ref('')
const { triggerConvertToDeal, assignees, document } = useDocument( const { triggerConvertToDeal, triggerOnChange, assignees, document } =
'CRM Lead', useDocument('CRM Lead', props.leadId)
props.leadId,
)
async function convertToDeal() { async function convertToDeal() {
if (existingContactChecked.value && !existingContact.value) { if (existingContactChecked.value && !existingContact.value) {

View File

@ -11,7 +11,14 @@
<div class="absolute right-0"> <div class="absolute right-0">
<Dropdown <Dropdown
v-if="document.doc" v-if="document.doc"
:options="statusOptions('deal', document, deal.data._customStatuses)" :options="
statusOptions(
'deal',
document,
deal.data._customStatuses,
triggerOnChange,
)
"
> >
<template #default="{ open }"> <template #default="{ open }">
<Button :label="document.doc.status"> <Button :label="document.doc.status">
@ -612,7 +619,10 @@ async function deleteDeal(name) {
router.push({ name: 'Deals' }) router.push({ name: 'Deals' })
} }
const { assignees, document } = useDocument('CRM Deal', props.dealId) const { assignees, document, triggerOnChange } = useDocument(
'CRM Deal',
props.dealId,
)
function reloadAssignees(data) { function reloadAssignees(data) {
if (data?.hasOwnProperty('deal_owner')) { if (data?.hasOwnProperty('deal_owner')) {

View File

@ -11,7 +11,14 @@
<div class="absolute right-0"> <div class="absolute right-0">
<Dropdown <Dropdown
v-if="document.doc" v-if="document.doc"
:options="statusOptions('lead', document, lead.data._customStatuses)" :options="
statusOptions(
'lead',
document,
lead.data._customStatuses,
triggerOnChange,
)
"
> >
<template #default="{ open }"> <template #default="{ open }">
<Button :label="document.doc.status"> <Button :label="document.doc.status">
@ -461,7 +468,10 @@ async function convertToDeal() {
} }
} }
const { assignees, document } = useDocument('CRM Lead', props.leadId) const { assignees, document, triggerOnChange } = useDocument(
'CRM Lead',
props.leadId,
)
function reloadAssignees(data) { function reloadAssignees(data) {
if (data?.hasOwnProperty('lead_owner')) { if (data?.hasOwnProperty('lead_owner')) {

View File

@ -77,7 +77,12 @@ export const statusesStore = defineStore('crm-statuses', () => {
return communicationStatuses[name] return communicationStatuses[name]
} }
function statusOptions(doctype, document, statuses = []) { function statusOptions(
doctype,
document,
statuses = [],
triggerOnChange = null,
) {
let statusesByName = let statusesByName =
doctype == 'deal' ? dealStatusesByName : leadStatusesByName doctype == 'deal' ? dealStatusesByName : leadStatusesByName
@ -85,7 +90,7 @@ export const statusesStore = defineStore('crm-statuses', () => {
statuses = document.statuses statuses = document.statuses
} }
if (statuses.length) { if (statuses?.length) {
statusesByName = statuses.reduce((acc, status) => { statusesByName = statuses.reduce((acc, status) => {
acc[status] = statusesByName[status] acc[status] = statusesByName[status]
return acc return acc
@ -98,10 +103,10 @@ export const statusesStore = defineStore('crm-statuses', () => {
label: statusesByName[status]?.name, label: statusesByName[status]?.name,
value: statusesByName[status]?.name, value: statusesByName[status]?.name,
icon: () => h(IndicatorIcon, { class: statusesByName[status]?.color }), icon: () => h(IndicatorIcon, { class: statusesByName[status]?.color }),
onClick: () => { onClick: async () => {
capture('status_changed', { doctype, status }) capture('status_changed', { doctype, status })
if (document) { if (document) {
document.doc.status = statusesByName[status]?.name await triggerOnChange?.('status', statusesByName[status]?.name)
document.save.submit() document.save.submit()
} }
}, },