From cf15cc6f129e4019cf18e05217c32e8d8782f8f4 Mon Sep 17 00:00:00 2001 From: kolaente Date: Fri, 15 Mar 2024 22:18:44 +0100 Subject: [PATCH] feat(views): fetch tasks via view context when accessing them through views --- .../src/components/project/ProjectWrapper.vue | 122 ++++++++---------- frontend/src/composables/useTaskList.ts | 13 +- frontend/src/helpers/projectView.ts | 16 +-- frontend/src/modelTypes/IProject.ts | 2 + frontend/src/modelTypes/IProjectView.ts | 24 ++++ frontend/src/router/index.ts | 11 ++ frontend/src/services/taskCollection.ts | 2 +- frontend/src/stores/kanban.ts | 4 +- frontend/src/stores/tasks.ts | 19 +-- frontend/src/views/project/ProjectGantt.vue | 10 +- frontend/src/views/project/ProjectKanban.vue | 6 +- frontend/src/views/project/ProjectList.vue | 7 +- frontend/src/views/project/ProjectTable.vue | 5 +- frontend/src/views/project/ProjectView.vue | 55 ++++++++ .../views/project/helpers/useGanttFilters.ts | 5 +- .../views/project/helpers/useGanttTaskList.ts | 17 ++- 16 files changed, 210 insertions(+), 108 deletions(-) create mode 100644 frontend/src/modelTypes/IProjectView.ts create mode 100644 frontend/src/views/project/ProjectView.vue diff --git a/frontend/src/components/project/ProjectWrapper.vue b/frontend/src/components/project/ProjectWrapper.vue index 255124b19..b4d178a92 100644 --- a/frontend/src/components/project/ProjectWrapper.vue +++ b/frontend/src/components/project/ProjectWrapper.vue @@ -6,47 +6,19 @@

{{ getProjectTitle(currentProject) }}

- +
- {{ $t('project.list.title') }} - - - {{ $t('project.gantt.title') }} - - - {{ $t('project.table.title') }} - - - {{ $t('project.kanban.title') }} + {{ getViewTitle(v) }}
- +
- + \ No newline at end of file diff --git a/frontend/src/views/project/helpers/useGanttFilters.ts b/frontend/src/views/project/helpers/useGanttFilters.ts index dfe8ccd8b..caf4df18d 100644 --- a/frontend/src/views/project/helpers/useGanttFilters.ts +++ b/frontend/src/views/project/helpers/useGanttFilters.ts @@ -12,6 +12,7 @@ import type {TaskFilterParams} from '@/services/taskCollection' import type {DateISO} from '@/types/DateISO' import type {DateKebab} from '@/types/DateKebab' +import type {IProjectView} from '@/modelTypes/IProjectView' // convenient internal filter object export interface GanttFilters { @@ -88,7 +89,7 @@ export type UseGanttFiltersReturn = ReturnType> & ReturnType> -export function useGanttFilters(route: Ref): UseGanttFiltersReturn { +export function useGanttFilters(route: Ref, view: IProjectView): UseGanttFiltersReturn { const { filters, hasDefaultFilters, @@ -108,7 +109,7 @@ export function useGanttFilters(route: Ref): UseGanttFi isLoading, addTask, updateTask, - } = useGanttTaskList(filters, ganttFiltersToApiParams) + } = useGanttTaskList(filters, ganttFiltersToApiParams, view) return { filters, diff --git a/frontend/src/views/project/helpers/useGanttTaskList.ts b/frontend/src/views/project/helpers/useGanttTaskList.ts index f2a76c8d6..8349b3c7c 100644 --- a/frontend/src/views/project/helpers/useGanttTaskList.ts +++ b/frontend/src/views/project/helpers/useGanttTaskList.ts @@ -1,4 +1,4 @@ -import {computed, ref, shallowReactive, watch, type Ref} from 'vue' +import {computed, ref, type Ref, shallowReactive, watch} from 'vue' import {klona} from 'klona/lite' import type {Filters} from '@/composables/useRouteFilters' @@ -10,16 +10,15 @@ import TaskService from '@/services/task' import TaskModel from '@/models/task' import {error, success} from '@/message' import {useAuthStore} from '@/stores/auth' +import type {IProjectView} from '@/modelTypes/IProjectView' // FIXME: unify with general `useTaskList` export function useGanttTaskList( filters: Ref, filterToApiParams: (filters: F) => TaskFilterParams, - options: { - loadAll?: boolean, - } = { - loadAll: true, - }) { + view: IProjectView, + loadAll: boolean = true, +) { const taskCollectionService = shallowReactive(new TaskCollectionService()) const taskService = shallowReactive(new TaskService()) const authStore = useAuthStore() @@ -29,13 +28,13 @@ export function useGanttTaskList( const tasks = ref>(new Map()) async function fetchTasks(params: TaskFilterParams, page = 1): Promise { - - if(params.filter_timezone === '') { + + if (params.filter_timezone === '') { params.filter_timezone = authStore.settings.timezone } const tasks = await taskCollectionService.getAll({projectId: filters.value.projectId}, params, page) as ITask[] - if (options.loadAll && page < taskCollectionService.totalPages) { + if (loadAll && page < taskCollectionService.totalPages) { const nextTasks = await fetchTasks(params, page + 1) return tasks.concat(nextTasks) }