diff --git a/frontend/src/components/project/views/ProjectKanban.vue b/frontend/src/components/project/views/ProjectKanban.vue index 7ae992a633..ef1c0913a3 100644 --- a/frontend/src/components/project/views/ProjectKanban.vue +++ b/frontend/src/components/project/views/ProjectKanban.vue @@ -41,7 +41,7 @@ @click="() => unCollapseBucket(bucket)" > @@ -109,7 +109,7 @@ @@ -117,7 +117,7 @@ @@ -304,6 +304,8 @@ import type {IProjectView} from '@/modelTypes/IProjectView' import TaskPositionService from '@/services/taskPosition' import TaskPositionModel from '@/models/taskPosition' import {i18n} from '@/i18n' +import ProjectViewService from '@/services/projectViews' +import ProjectViewModel from '@/models/projectView' const { projectId, @@ -393,6 +395,8 @@ const project = computed(() => projectId ? projectStore.projects[projectId] : nu const buckets = computed(() => kanbanStore.buckets) const loading = computed(() => kanbanStore.isLoading) +const view = computed(() => project.value?.views.find(v => v.id === viewId) || null) + const taskLoading = computed(() => taskStore.isLoading || taskPositionService.value.loading) watch( @@ -701,26 +705,46 @@ function dragstart(bucket: IBucket) { } async function toggleDefaultBucket(bucket: IBucket) { - const defaultBucketId = project.value.defaultBucketId === bucket.id + const defaultBucketId = view.value?.defaultBucketId === bucket.id ? 0 : bucket.id - await projectStore.updateProject({ - ...project.value, + const projectViewService = new ProjectViewService() + const updatedView = await projectViewService.update(new ProjectViewModel({ + ...view.value, defaultBucketId, - }) + })) + + const views = project.value.views.map(v => v.id === view.value?.id ? updatedView : v) + const updatedProject = { + ...project.value, + views, + } + + projectStore.setProject(updatedProject) + success({message: t('project.kanban.defaultBucketSavedSuccess')}) } async function toggleDoneBucket(bucket: IBucket) { - const doneBucketId = project.value?.doneBucketId === bucket.id + const doneBucketId = view.value?.doneBucketId === bucket.id ? 0 : bucket.id - - await projectStore.updateProject({ - ...project.value, + + const projectViewService = new ProjectViewService() + const updatedView = await projectViewService.update(new ProjectViewModel({ + ...view.value, doneBucketId, - }) + })) + + const views = project.value.views.map(v => v.id === view.value?.id ? updatedView : v) + const updatedProject = { + ...project.value, + views, + } + + projectStore.setProject(updatedProject) + success({message: t('project.kanban.doneBucketSavedSuccess')}) } diff --git a/frontend/src/modelTypes/IProject.ts b/frontend/src/modelTypes/IProject.ts index c4e212e83d..150edad666 100644 --- a/frontend/src/modelTypes/IProject.ts +++ b/frontend/src/modelTypes/IProject.ts @@ -20,8 +20,6 @@ export interface IProject extends IAbstract { position: number backgroundBlurHash: string parentProjectId: number - doneBucketId: number - defaultBucketId: number views: IProjectView[] created: Date diff --git a/frontend/src/models/project.ts b/frontend/src/models/project.ts index 06c9e8ee71..f0ee4b1ab1 100644 --- a/frontend/src/models/project.ts +++ b/frontend/src/models/project.ts @@ -24,8 +24,6 @@ export default class ProjectModel extends AbstractModel implements IPr position = 0 backgroundBlurHash = '' parentProjectId = 0 - doneBucketId = 0 - defaultBucketId = 0 views = [] created: Date = null