diff --git a/frontend/src/components/AppSidebar.vue b/frontend/src/components/AppSidebar.vue index f56d4ead..d4c061ed 100644 --- a/frontend/src/components/AppSidebar.vue +++ b/frontend/src/components/AppSidebar.vue @@ -15,6 +15,27 @@ class="mx-2 my-0.5" /> +
+
Pinned Views
+ +
diff --git a/frontend/src/components/ViewControls.vue b/frontend/src/components/ViewControls.vue index b7ed3585..365dadc4 100644 --- a/frontend/src/components/ViewControls.vue +++ b/frontend/src/components/ViewControls.vue @@ -89,7 +89,7 @@ const props = defineProps({ }) const { $dialog } = globalStore() -const { getView } = viewsStore() +const { reload: reloadView, getView } = viewsStore() const list = defineModel() @@ -132,6 +132,7 @@ function getParams() { order_by: _view.order_by, columns: _view.columns, rows: _view.rows, + route_name: _view.route_name, default_columns: _view.row, pinned: _view.pinned, } @@ -143,6 +144,7 @@ function getParams() { order_by: 'modified desc', columns: '', rows: '', + route_name: '', default_columns: true, pinned: false, } @@ -302,6 +304,7 @@ const viewActions = computed(() => { value: !view.value.pinned, }).then(() => { view.value.pinned = !view.value.pinned + reloadView() }) }, }) @@ -332,6 +335,7 @@ const viewActions = computed(() => { } ).then(() => { router.push({ name: route.name }) + reloadView() }) }, }, @@ -357,6 +361,7 @@ function saveView() { order_by: defaultParams.value.order_by, columns: defaultParams.value.columns, rows: defaultParams.value.rows, + route_name: route.name, default_columns: view.value.default_columns, } showViewModal.value = true diff --git a/frontend/src/stores/views.js b/frontend/src/stores/views.js index 64039643..87a209a6 100644 --- a/frontend/src/stores/views.js +++ b/frontend/src/stores/views.js @@ -1,9 +1,10 @@ import { defineStore } from 'pinia' import { createListResource } from 'frappe-ui' -import { reactive } from 'vue' +import { reactive, ref } from 'vue' export const viewsStore = defineStore('crm-views', () => { let viewsByName = reactive({}) + let pinnedViews = ref([]) const views = createListResource({ doctype: 'CRM View Settings', @@ -12,8 +13,12 @@ export const viewsStore = defineStore('crm-views', () => { initialData: [], auto: true, transform(views) { + pinnedViews.value = [] for (let view of views) { viewsByName[view.name] = view + if (view.pinned) { + pinnedViews.value?.push(view) + } } return views }, @@ -27,8 +32,19 @@ export const viewsStore = defineStore('crm-views', () => { return viewsByName[view] } + function getPinnedViews() { + if (!pinnedViews.value?.length) return [] + return pinnedViews.value + } + + function reload() { + views.reload() + } + return { views, + getPinnedViews, + reload, getView, } })