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 defaultView = ref({}) // 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 if (view.pinned) { pinnedViews.value?.push(view) } if (view.public) { publicViews.value?.push(view) } if (view.is_default && view.dt) { defaultView.value[view.dt] = view } } return views }, }) function getView(view, doctype = null) { if (!view && doctype) { return defaultView.value?.[doctype] || 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, getPinnedViews, getPublicViews, reload, getView, } })