1
0

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:
kolaente
2023-06-28 15:20:43 +02:00
parent ac6c4cf2bc
commit 2a14325f62
7 changed files with 56 additions and 4 deletions

View File

@ -59,6 +59,7 @@ import LlamaCool from '@/assets/llama-cool.svg?component'
import type {ITask} from '@/modelTypes/ITask'
import {useAuthStore} from '@/stores/auth'
import {useTaskStore} from '@/stores/tasks'
import {useProjectStore} from '@/stores/projects'
const authStore = useAuthStore()
const taskStore = useTaskStore()
@ -69,6 +70,8 @@ const {t} = useI18n({useScope: 'global'})
const tasks = ref<ITask[]>([])
const showNothingToDo = ref<boolean>(false)
const projectStore = useProjectStore()
setTimeout(() => showNothingToDo.value = true, 100)
// Linting disabled because we explicitely enabled destructuring in vite's config, this will work.
@ -178,6 +181,11 @@ async function loadPendingTasks(from: string, to: string) {
params.filterComparator.push('greater')
}
}
if (authStore.settings.frontendSettings.filterIdUsedOnOverview && typeof projectStore.projects[authStore.settings.frontendSettings.filterIdUsedOnOverview] !== 'undefined') {
tasks.value = await taskStore.loadTasks(params, authStore.settings.frontendSettings.filterIdUsedOnOverview)
return
}
tasks.value = await taskStore.loadTasks(params)
}

View File

@ -18,6 +18,12 @@
</label>
<project-search v-model="defaultProject"/>
</div>
<div class="field" v-if="hasFilters">
<label class="label">
{{ $t('user.settings.general.filterUsedOnOverview') }}
</label>
<project-search v-model="filterUsedInOverview" :saved-filters-only="true"/>
</div>
<div class="field">
<label class="checkbox">
<input type="checkbox" v-model="settings.overdueTasksRemindersEnabled"/>
@ -167,6 +173,7 @@ import {useTitle} from '@/composables/useTitle'
import {useProjectStore} from '@/stores/projects'
import {useAuthStore} from '@/stores/auth'
import type {IUserSettings} from '@/modelTypes/IUserSettings'
import {isSavedFilter} from '@/services/savedFilter'
const {t} = useI18n({useScope: 'global'})
useTitle(() => `${t('user.settings.general.title')} - ${t('user.settings.title')}`)
@ -233,6 +240,13 @@ const defaultProject = computed({
settings.value.defaultProjectId = l ? l.id : DEFAULT_PROJECT_ID
},
})
const filterUsedInOverview = computed({
get: () => projectStore.projects[settings.value.frontendSettings.filterIdUsedOnOverview],
set(l) {
settings.value.frontendSettings.filterIdUsedOnOverview = l ? l.id : null
},
})
const hasFilters = computed(() => typeof projectStore.projectsArray.find(p => isSavedFilter(p)) !== 'undefined')
const loading = computed(() => authStore.isLoadingGeneralSettings)
async function updateSettings() {