From acbb06e337f57e56933f763c54cd420d75ffb184 Mon Sep 17 00:00:00 2001 From: kolaente Date: Sat, 24 Jan 2026 13:12:35 +0100 Subject: [PATCH] feat(frontend): preserve Gantt date range when switching views (#2141) Adds a `viewFilters` Pinia store that stores query params per view ID to sync Gantt filters to the store whenever they change. This persists the custom date ranges when switching between views. Fixes #2124 --- .../src/components/project/ProjectWrapper.vue | 15 ++++++- frontend/src/stores/viewFilters.test.ts | 41 +++++++++++++++++++ frontend/src/stores/viewFilters.ts | 27 ++++++++++++ .../views/project/helpers/useGanttFilters.ts | 23 ++++++++++- 4 files changed, 102 insertions(+), 4 deletions(-) create mode 100644 frontend/src/stores/viewFilters.test.ts create mode 100644 frontend/src/stores/viewFilters.ts diff --git a/frontend/src/components/project/ProjectWrapper.vue b/frontend/src/components/project/ProjectWrapper.vue index 35c6219f5..557ba4382 100644 --- a/frontend/src/components/project/ProjectWrapper.vue +++ b/frontend/src/components/project/ProjectWrapper.vue @@ -23,7 +23,7 @@ :key="view.id" class="switch-view-button" :class="{'is-active': view.id === viewId}" - :to="{ name: 'project.view', params: { projectId, viewId: view.id } }" + :to="getViewRoute(view)" > {{ getViewTitle(view) }} @@ -57,6 +57,7 @@ import {useTitle} from '@/composables/useTitle' import {useBaseStore} from '@/stores/base' import {useProjectStore} from '@/stores/projects' +import {useViewFiltersStore} from '@/stores/viewFilters' import type {IProject} from '@/modelTypes/IProject' import type {IProjectView} from '@/modelTypes/IProjectView' @@ -71,6 +72,7 @@ const {t} = useI18n() const baseStore = useBaseStore() const projectStore = useProjectStore() +const viewFiltersStore = useViewFiltersStore() const currentProject = computed(() => { return baseStore.currentProject || { @@ -95,9 +97,18 @@ function getViewTitle(view: IProjectView) { case 'Kanban': return t('project.kanban.title') } - + return view.title } + +function getViewRoute(view: IProjectView) { + const storedQuery = viewFiltersStore.getViewQuery(view.id) + return { + name: 'project.view', + params: {projectId: props.projectId, viewId: view.id}, + query: storedQuery, + } +}