fix: created store for lead/deal statuses
This commit is contained in:
parent
cf2868953d
commit
f6adadf040
79
frontend/src/stores/statuses.js
Normal file
79
frontend/src/stores/statuses.js
Normal 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,
|
||||
}
|
||||
})
|
||||
Loading…
x
Reference in New Issue
Block a user