diff --git a/packages/nc-gui/store/views.ts b/packages/nc-gui/store/views.ts index 12e76ba77d..de0fad35c6 100644 --- a/packages/nc-gui/store/views.ts +++ b/packages/nc-gui/store/views.ts @@ -8,7 +8,18 @@ export const useViewsStore = defineStore('viewsStore', () => { const router = useRouter() const route = router.currentRoute - const views = ref([]) + const tablesStore = useTablesStore() + + const viewsByTable = ref>(new Map()) + const views = computed({ + get: () => (tablesStore.activeTableId ? viewsByTable.value.get(tablesStore.activeTableId) : []) ?? [], + set: (value) => { + if (!tablesStore.activeTableId) return + if (!value) return viewsByTable.value.delete(tablesStore.activeTableId) + + viewsByTable.value.set(tablesStore.activeTableId, value) + }, + }) const isViewsLoading = ref(true) const isViewDataLoading = ref(true) const isPublic = computed(() => route.value.meta?.public) @@ -70,16 +81,20 @@ export const useViewsStore = defineStore('viewsStore', () => { // Used for Grid View Pagination const isPaginationLoading = ref(false) - const tablesStore = useTablesStore() + const loadViews = async ({ tableId, ignoreLoading }: { tableId?: string; ignoreLoading?: boolean } = {}) => { + tableId = tableId ?? tablesStore.activeTableId + if (tableId) { + if (!ignoreLoading) isViewsLoading.value = true - const loadViews = async () => { - if (tablesStore.activeTableId) { - isViewsLoading.value = true - const response = (await $api.dbView.list(tablesStore.activeTableId)).list as ViewType[] + const response = (await $api.dbView.list(tableId)).list as ViewType[] if (response) { - views.value = response.sort((a, b) => a.order! - b.order!) + viewsByTable.value.set( + tableId, + response.sort((a, b) => a.order! - b.order!), + ) } - isViewsLoading.value = false + + if (!ignoreLoading) isViewsLoading.value = false } } @@ -132,6 +147,8 @@ export const useViewsStore = defineStore('viewsStore', () => { openedViewsTab, onViewsTabChange, sharedView, + viewsByTable, + activeViewTitleOrId, } })