chore: refactor get parents project and move to projects store
This commit is contained in:
parent
6a8c656dbb
commit
c32a198a34
@ -12,7 +12,7 @@
|
|||||||
>
|
>
|
||||||
<template #searchResult="{option}">
|
<template #searchResult="{option}">
|
||||||
<span class="has-text-grey">
|
<span class="has-text-grey">
|
||||||
{{ getParentProjects(option, projectStore).filter(p => p.id !== option.id).map(p => getProjectTitle(p) ).join(' > ') }} >
|
{{ projectStore.getParentProjects(option).filter(p => p.id !== option.id).map(p => getProjectTitle(p) ).join(' > ') }} >
|
||||||
</span>
|
</span>
|
||||||
{{ getProjectTitle(option) }}
|
{{ getProjectTitle(option) }}
|
||||||
</template>
|
</template>
|
||||||
@ -27,7 +27,7 @@ import {useI18n} from 'vue-i18n'
|
|||||||
import type {IProject} from '@/modelTypes/IProject'
|
import type {IProject} from '@/modelTypes/IProject'
|
||||||
|
|
||||||
import {useProjectStore} from '@/stores/projects'
|
import {useProjectStore} from '@/stores/projects'
|
||||||
import {getProjectTitle, getParentProjects} from '@/helpers/getProjectTitle'
|
import {getProjectTitle} from '@/helpers/getProjectTitle'
|
||||||
|
|
||||||
import ProjectModel from '@/models/project'
|
import ProjectModel from '@/models/project'
|
||||||
|
|
||||||
|
@ -13,16 +13,3 @@ export function getProjectTitle(project: IProject) {
|
|||||||
|
|
||||||
return project.title
|
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,
|
|
||||||
]
|
|
||||||
}
|
|
||||||
|
@ -47,9 +47,9 @@ export const useProjectStore = defineStore('project', () => {
|
|||||||
const searchProject = computed(() => {
|
const searchProject = computed(() => {
|
||||||
return (query: string, includeArchived = false) => {
|
return (query: string, includeArchived = false) => {
|
||||||
return search(query)
|
return search(query)
|
||||||
?.filter(value => value > 0)
|
?.filter(value => value > 0)
|
||||||
.map(id => projects.value[id])
|
.map(id => projects.value[id])
|
||||||
.filter(project => project.isArchived === includeArchived)
|
.filter(project => project.isArchived === includeArchived)
|
||||||
|| []
|
|| []
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -65,21 +65,21 @@ export const useProjectStore = defineStore('project', () => {
|
|||||||
if (baseStore.currentProject?.id === project.id) {
|
if (baseStore.currentProject?.id === project.id) {
|
||||||
baseStore.setCurrentProject(project)
|
baseStore.setCurrentProject(project)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (updateChildren) {
|
if (updateChildren) {
|
||||||
project.childProjects?.forEach(p => setProject(p))
|
project.childProjects?.forEach(p => setProject(p))
|
||||||
}
|
}
|
||||||
|
|
||||||
// if the project is a child project, we need to also set it in the parent
|
// if the project is a child project, we need to also set it in the parent
|
||||||
if (project.parentProjectId) {
|
if (project.parentProjectId) {
|
||||||
const parent = projects.value[project.parentProjectId]
|
const parent = projects.value[project.parentProjectId]
|
||||||
let foundProject = false
|
let foundProject = false
|
||||||
parent.childProjects = parent.childProjects?.map(p => {
|
parent.childProjects = parent.childProjects?.map(p => {
|
||||||
if(p.id === project.id) {
|
if (p.id === project.id) {
|
||||||
foundProject = true
|
foundProject = true
|
||||||
return project
|
return project
|
||||||
}
|
}
|
||||||
|
|
||||||
return p
|
return p
|
||||||
})
|
})
|
||||||
// If we hit this, the project now has a new parent project which it did not have before
|
// 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()
|
cancel()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function loadProjects() {
|
async function loadProjects() {
|
||||||
const cancel = setModuleLoading(setIsLoading)
|
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 {
|
return {
|
||||||
isLoading: readonly(isLoading),
|
isLoading: readonly(isLoading),
|
||||||
projects: readonly(projects),
|
projects: readonly(projects),
|
||||||
@ -196,6 +208,7 @@ export const useProjectStore = defineStore('project', () => {
|
|||||||
createProject,
|
createProject,
|
||||||
updateProject,
|
updateProject,
|
||||||
deleteProject,
|
deleteProject,
|
||||||
|
getParentProjects,
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -215,6 +228,7 @@ export function useProject(projectId: MaybeRef<IProject['id']>) {
|
|||||||
)
|
)
|
||||||
|
|
||||||
const projectStore = useProjectStore()
|
const projectStore = useProjectStore()
|
||||||
|
|
||||||
async function save() {
|
async function save() {
|
||||||
await projectStore.updateProject(project)
|
await projectStore.updateProject(project)
|
||||||
success({message: t('project.edit.success')})
|
success({message: t('project.edit.success')})
|
||||||
@ -229,5 +243,5 @@ export function useProject(projectId: MaybeRef<IProject['id']>) {
|
|||||||
|
|
||||||
// support hot reloading
|
// support hot reloading
|
||||||
if (import.meta.hot) {
|
if (import.meta.hot) {
|
||||||
import.meta.hot.accept(acceptHMRUpdate(useProjectStore, import.meta.hot))
|
import.meta.hot.accept(acceptHMRUpdate(useProjectStore, import.meta.hot))
|
||||||
}
|
}
|
@ -14,7 +14,7 @@
|
|||||||
ref="heading"
|
ref="heading"
|
||||||
/>
|
/>
|
||||||
<h6 class="subtitle" v-if="project?.id">
|
<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 } }">
|
<router-link :to="{ name: 'project.index', params: { projectId: p.id } }">
|
||||||
{{ getProjectTitle(p) }}
|
{{ getProjectTitle(p) }}
|
||||||
</router-link>
|
</router-link>
|
||||||
@ -488,7 +488,7 @@ import TaskSubscription from '@/components/misc/subscription.vue'
|
|||||||
import CustomTransition from '@/components/misc/CustomTransition.vue'
|
import CustomTransition from '@/components/misc/CustomTransition.vue'
|
||||||
|
|
||||||
import {uploadFile} from '@/helpers/attachments'
|
import {uploadFile} from '@/helpers/attachments'
|
||||||
import {getProjectTitle, getParentProjects} from '@/helpers/getProjectTitle'
|
import {getProjectTitle} from '@/helpers/getProjectTitle'
|
||||||
import {scrollIntoView} from '@/helpers/scrollIntoView'
|
import {scrollIntoView} from '@/helpers/scrollIntoView'
|
||||||
|
|
||||||
import {useBaseStore} from '@/stores/base'
|
import {useBaseStore} from '@/stores/base'
|
||||||
|
Loading…
x
Reference in New Issue
Block a user