feat(templates): add isTemplate to frontend project model and store
This commit is contained in:
parent
692a6d623d
commit
6b6ca25efa
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
Loading…
Reference in New Issue