fix: created store for lead/deal statuses

This commit is contained in:
Shariq Ansari 2023-11-29 13:00:00 +05:30
parent cf2868953d
commit f6adadf040

View File

@ -0,0 +1,79 @@
import { defineStore } from 'pinia'
import { createListResource } from 'frappe-ui'
import { reactive, h } from 'vue'
import IndicatorIcon from '@/components/Icons/IndicatorIcon.vue'
export const statusesStore = defineStore('crm-statuses', () => {
let leadStatusesByName = reactive({})
let dealStatusesByName = reactive({})
const leadStatuses = createListResource({
doctype: 'CRM Lead Status',
fields: ['name', 'color', 'position'],
orderBy: 'position asc',
cache: 'lead-statuses',
initialData: [],
auto: true,
transform(statuses) {
for (let status of statuses) {
status.color =
status.color == 'black'
? '!text-gray-900'
: `!text-${status.color}-600`
leadStatusesByName[status.name] = status
}
return statuses
},
})
const dealStatuses = createListResource({
doctype: 'CRM Deal Status',
fields: ['name', 'color', 'position'],
orderBy: 'position asc',
cache: 'deal-statuses',
initialData: [],
auto: true,
transform(statuses) {
for (let status of statuses) {
status.color =
status.color == 'black'
? '!text-gray-900'
: `!text-${status.color}-600`
dealStatusesByName[status.name] = status
}
return statuses
},
})
function getLeadStatus(name) {
return leadStatusesByName[name]
}
function getDealStatus(name) {
return dealStatusesByName[name]
}
function statusOptions(doctype, action) {
let statusesByName =
doctype == 'deal' ? dealStatusesByName : leadStatusesByName
let options = []
for (const status in statusesByName) {
options.push({
label: statusesByName[status].name,
icon: () => h(IndicatorIcon, { class: statusesByName[status].color }),
onClick: () => {
action && action('status', statusesByName[status].name)
},
})
}
return options
}
return {
leadStatuses,
dealStatuses,
getLeadStatus,
getDealStatus,
statusOptions,
}
})