From c32a198a34edd3db7d6967010ce9dde401d1c864 Mon Sep 17 00:00:00 2001 From: kolaente Date: Tue, 28 Mar 2023 21:28:29 +0200 Subject: [PATCH] chore: refactor get parents project and move to projects store --- .../tasks/partials/projectSearch.vue | 4 +-- src/helpers/getProjectTitle.ts | 13 -------- src/stores/projects.ts | 32 +++++++++++++------ src/views/tasks/TaskDetailView.vue | 4 +-- 4 files changed, 27 insertions(+), 26 deletions(-) diff --git a/src/components/tasks/partials/projectSearch.vue b/src/components/tasks/partials/projectSearch.vue index 41d0e45c7..41a0ee5ab 100644 --- a/src/components/tasks/partials/projectSearch.vue +++ b/src/components/tasks/partials/projectSearch.vue @@ -12,7 +12,7 @@ > @@ -27,7 +27,7 @@ import {useI18n} from 'vue-i18n' import type {IProject} from '@/modelTypes/IProject' import {useProjectStore} from '@/stores/projects' -import {getProjectTitle, getParentProjects} from '@/helpers/getProjectTitle' +import {getProjectTitle} from '@/helpers/getProjectTitle' import ProjectModel from '@/models/project' diff --git a/src/helpers/getProjectTitle.ts b/src/helpers/getProjectTitle.ts index 170c9649f..ccc239bf4 100644 --- a/src/helpers/getProjectTitle.ts +++ b/src/helpers/getProjectTitle.ts @@ -13,16 +13,3 @@ export function getProjectTitle(project: IProject) { return project.title } - -export function getParentProjects(project: IProject, projectStore): IProject[] { - let parents = [] - if (project.parentProjectId) { - const parentProject = projectStore.getProjectById(project.parentProjectId) - parents = getParentProjects(parentProject, projectStore) - } - - return [ - ...parents, - project, - ] -} diff --git a/src/stores/projects.ts b/src/stores/projects.ts index 32578b768..b54ab8d1a 100644 --- a/src/stores/projects.ts +++ b/src/stores/projects.ts @@ -47,9 +47,9 @@ export const useProjectStore = defineStore('project', () => { const searchProject = computed(() => { return (query: string, includeArchived = false) => { return search(query) - ?.filter(value => value > 0) - .map(id => projects.value[id]) - .filter(project => project.isArchived === includeArchived) + ?.filter(value => value > 0) + .map(id => projects.value[id]) + .filter(project => project.isArchived === includeArchived) || [] } }) @@ -65,21 +65,21 @@ export const useProjectStore = defineStore('project', () => { if (baseStore.currentProject?.id === project.id) { baseStore.setCurrentProject(project) } - + if (updateChildren) { project.childProjects?.forEach(p => setProject(p)) } - + // if the project is a child project, we need to also set it in the parent if (project.parentProjectId) { const parent = projects.value[project.parentProjectId] let foundProject = false parent.childProjects = parent.childProjects?.map(p => { - if(p.id === project.id) { + if (p.id === project.id) { foundProject = true return project } - + return p }) // If we hit this, the project now has a new parent project which it did not have before @@ -162,7 +162,7 @@ export const useProjectStore = defineStore('project', () => { cancel() } } - + async function loadProjects() { const cancel = setModuleLoading(setIsLoading) @@ -178,6 +178,18 @@ export const useProjectStore = defineStore('project', () => { } } + function getParentProjects(project: IProject): IProject[] { + if (!project?.parentProjectId) { + return [project] + } + + const parentProject = projects.value[project.parentProjectId] + return [ + ...getParentProjects(parentProject), + project, + ] + } + return { isLoading: readonly(isLoading), projects: readonly(projects), @@ -196,6 +208,7 @@ export const useProjectStore = defineStore('project', () => { createProject, updateProject, deleteProject, + getParentProjects, } }) @@ -215,6 +228,7 @@ export function useProject(projectId: MaybeRef) { ) const projectStore = useProjectStore() + async function save() { await projectStore.updateProject(project) success({message: t('project.edit.success')}) @@ -229,5 +243,5 @@ export function useProject(projectId: MaybeRef) { // support hot reloading if (import.meta.hot) { - import.meta.hot.accept(acceptHMRUpdate(useProjectStore, import.meta.hot)) + import.meta.hot.accept(acceptHMRUpdate(useProjectStore, import.meta.hot)) } \ No newline at end of file diff --git a/src/views/tasks/TaskDetailView.vue b/src/views/tasks/TaskDetailView.vue index 1c1d1158e..54c5daa61 100644 --- a/src/views/tasks/TaskDetailView.vue +++ b/src/views/tasks/TaskDetailView.vue @@ -14,7 +14,7 @@ ref="heading" />
-