chore: refactor get parents project and move to projects store

This commit is contained in:
kolaente 2023-03-28 21:28:29 +02:00
parent 6a8c656dbb
commit c32a198a34
Signed by: konrad
GPG Key ID: F40E70337AB24C9B
4 changed files with 27 additions and 26 deletions

View File

@ -12,7 +12,7 @@
>
<template #searchResult="{option}">
<span class="has-text-grey">
{{ getParentProjects(option, projectStore).filter(p => p.id !== option.id).map(p => getProjectTitle(p) ).join(' &gt; ') }} &gt;
{{ projectStore.getParentProjects(option).filter(p => p.id !== option.id).map(p => getProjectTitle(p) ).join(' &gt; ') }} &gt;
</span>
{{ getProjectTitle(option) }}
</template>
@ -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'

View File

@ -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,
]
}

View File

@ -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<IProject['id']>) {
)
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<IProject['id']>) {
// 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))
}

View File

@ -14,7 +14,7 @@
ref="heading"
/>
<h6 class="subtitle" v-if="project?.id">
<template v-for="p in getParentProjects(project, projectStore)">
<template v-for="p in projectStore.getParentProjects(project)">
<router-link :to="{ name: 'project.index', params: { projectId: p.id } }">
{{ getProjectTitle(p) }}
</router-link>
@ -488,7 +488,7 @@ import TaskSubscription from '@/components/misc/subscription.vue'
import CustomTransition from '@/components/misc/CustomTransition.vue'
import {uploadFile} from '@/helpers/attachments'
import {getProjectTitle, getParentProjects} from '@/helpers/getProjectTitle'
import {getProjectTitle} from '@/helpers/getProjectTitle'
import {scrollIntoView} from '@/helpers/scrollIntoView'
import {useBaseStore} from '@/stores/base'