feat(templates): add isTemplate to frontend project model and store

This commit is contained in:
kolaente 2026-03-24 19:47:28 +01:00
parent 692a6d623d
commit 6b6ca25efa
3 changed files with 19 additions and 4 deletions

View File

@ -12,6 +12,7 @@ export interface IProject extends IAbstract {
owner: IUser
tasks: ITask[]
isArchived: boolean
isTemplate: boolean
hexColor: string
identifier: string
backgroundInformation: unknown | null // FIXME: improve type

View File

@ -17,6 +17,7 @@ export default class ProjectModel extends AbstractModel<IProject> implements IPr
owner: IUser = UserModel
tasks: ITask[] = []
isArchived = false
isTemplate = false
hexColor = ''
identifier = ''
backgroundInformation: unknown | null = null

View File

@ -37,14 +37,17 @@ export const useProjectStore = defineStore('project', () => {
}
const notArchivedRootProjects = computed(() => projectsArray.value
.filter(p => !p.isArchived && p.id > 0 && (
.filter(p => !p.isArchived && !p.isTemplate && p.id > 0 && (
p.parentProjectId === 0 || isOrphanedSubProject(p)
)))
const favoriteProjects = computed(() => projectsArray.value
.filter(p => !p.isArchived && p.isFavorite))
.filter(p => !p.isArchived && !p.isTemplate && p.isFavorite))
const savedFilterProjects = computed(() => projectsArray.value
.filter(p => !p.isArchived && p.id < -1))
const hasProjects = computed(() => projectsArray.value.length > 0)
const templateProjects = computed(() => projectsArray.value
.filter(p => !p.isArchived && p.isTemplate))
const hasTemplates = computed(() => templateProjects.value.length > 0)
const getChildProjects = computed(() => {
return (id: IProject['id']) => projectsArray.value.filter(p => p.parentProjectId === id)
@ -265,11 +268,19 @@ export const useProjectStore = defineStore('project', () => {
loadedProjects.push(...newProjects)
page++
} while (page <= projectService.totalPages)
// Fetch templates separately
let templatePage = 1
do {
const newTemplates = await projectService.getAll({}, {is_template: true, expand: 'permissions'}, templatePage) as IProject[]
loadedProjects.push(...newTemplates)
templatePage++
} while (templatePage <= projectService.totalPages)
} finally {
cancel()
}
projects.value = {}
setProjects(loadedProjects)
@ -329,6 +340,8 @@ export const useProjectStore = defineStore('project', () => {
favoriteProjects: readonly(favoriteProjects),
hasProjects: readonly(hasProjects),
savedFilterProjects: readonly(savedFilterProjects),
templateProjects: readonly(templateProjects),
hasTemplates: readonly(hasTemplates),
getChildProjects,
isOrphanedSubProject,