feat(projects): allow setting a saved filter for tasks shown on the overview page
Resolves https://kolaente.dev/vikunja/api/issues/1545 Resolves https://community.vikunja.io/t/customizable-overview-page/685
This commit is contained in:
@ -17,6 +17,7 @@ import type {MaybeRef} from '@vueuse/core'
|
||||
import ProjectModel from '@/models/project'
|
||||
import {success} from '@/message'
|
||||
import {useBaseStore} from '@/stores/base'
|
||||
import {getSavedFilterIdFromProjectId} from '@/services/savedFilter'
|
||||
|
||||
const {remove, search, update} = createNewIndexer('projects', ['title', 'description'])
|
||||
|
||||
@ -62,6 +63,16 @@ export const useProjectStore = defineStore('project', () => {
|
||||
|| []
|
||||
}
|
||||
})
|
||||
|
||||
const searchSavedFilter = computed(() => {
|
||||
return (query: string, includeArchived = false) => {
|
||||
return search(query)
|
||||
?.filter(value => getSavedFilterIdFromProjectId(value) > 0)
|
||||
.map(id => projects.value[id])
|
||||
.filter(project => project.isArchived === includeArchived)
|
||||
|| []
|
||||
}
|
||||
})
|
||||
|
||||
function setIsLoading(newIsLoading: boolean) {
|
||||
isLoading.value = newIsLoading
|
||||
@ -191,6 +202,7 @@ export const useProjectStore = defineStore('project', () => {
|
||||
getChildProjects,
|
||||
findProjectByExactname,
|
||||
searchProject,
|
||||
searchSavedFilter,
|
||||
|
||||
setProject,
|
||||
setProjects,
|
||||
|
@ -29,6 +29,7 @@ import {useKanbanStore} from '@/stores/kanban'
|
||||
import {useBaseStore} from '@/stores/base'
|
||||
import ProjectUserService from '@/services/projectUsers'
|
||||
import {useAuthStore} from '@/stores/auth'
|
||||
import TaskCollectionService from '@/services/taskCollection'
|
||||
|
||||
interface MatchedAssignee extends IUser {
|
||||
match: string,
|
||||
@ -123,12 +124,17 @@ export const useTaskStore = defineStore('task', () => {
|
||||
})
|
||||
}
|
||||
|
||||
async function loadTasks(params) {
|
||||
const taskService = new TaskService()
|
||||
async function loadTasks(params, projectId: IProject['id'] | null = null) {
|
||||
|
||||
const cancel = setModuleLoading(setIsLoading)
|
||||
try {
|
||||
tasks.value = await taskService.getAll({}, params)
|
||||
if (projectId === null) {
|
||||
const taskService = new TaskService()
|
||||
tasks.value = await taskService.getAll({}, params)
|
||||
} else {
|
||||
const taskCollectionService = new TaskCollectionService()
|
||||
tasks.value = await taskCollectionService.getAll({projectId}, params)
|
||||
}
|
||||
baseStore.setHasTasks(tasks.value.length > 0)
|
||||
return tasks.value
|
||||
} finally {
|
||||
|
Reference in New Issue
Block a user