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