79 lines
1.7 KiB
JavaScript
79 lines
1.7 KiB
JavaScript
import { defineStore } from 'pinia'
|
|
import { createResource } from 'frappe-ui'
|
|
import { reactive, ref } from 'vue'
|
|
|
|
export const viewsStore = defineStore('crm-views', (doctype) => {
|
|
let viewsByName = reactive({})
|
|
let pinnedViews = ref([])
|
|
let publicViews = ref([])
|
|
let standardViews = ref({})
|
|
const defaultView = ref(null)
|
|
|
|
// Views
|
|
const views = createResource({
|
|
url: 'crm.api.views.get_views',
|
|
params: { doctype: doctype || '' },
|
|
cache: 'crm-views',
|
|
initialData: [],
|
|
auto: true,
|
|
transform(views) {
|
|
pinnedViews.value = []
|
|
publicViews.value = []
|
|
for (let view of views) {
|
|
viewsByName[view.name] = view
|
|
view.type = view.type || 'list'
|
|
if (view.pinned) {
|
|
pinnedViews.value?.push(view)
|
|
}
|
|
if (view.public) {
|
|
publicViews.value?.push(view)
|
|
}
|
|
if (view.is_standard && view.dt) {
|
|
standardViews.value[view.dt + ' ' + view.type] = view
|
|
}
|
|
if (view.is_default) {
|
|
defaultView.value = view
|
|
}
|
|
}
|
|
return views
|
|
},
|
|
})
|
|
|
|
function getDefaultView() {
|
|
return defaultView.value
|
|
}
|
|
|
|
function getView(view, type, doctype = null) {
|
|
type = type || 'list'
|
|
if (!view && doctype) {
|
|
return standardViews.value[doctype + ' ' + type] || null
|
|
}
|
|
return viewsByName[view]
|
|
}
|
|
|
|
function getPinnedViews() {
|
|
if (!pinnedViews.value?.length) return []
|
|
return pinnedViews.value
|
|
}
|
|
|
|
function getPublicViews() {
|
|
if (!publicViews.value?.length) return []
|
|
return publicViews.value
|
|
}
|
|
|
|
async function reload() {
|
|
await views.reload()
|
|
}
|
|
|
|
return {
|
|
views,
|
|
defaultView,
|
|
standardViews,
|
|
getDefaultView,
|
|
getPinnedViews,
|
|
getPublicViews,
|
|
reload,
|
|
getView,
|
|
}
|
|
})
|