diff --git a/frontend/src/components/project/partials/FilterInput.vue b/frontend/src/components/project/partials/FilterInput.vue index c335c80ca..f6b1f8a79 100644 --- a/frontend/src/components/project/partials/FilterInput.vue +++ b/frontend/src/components/project/partials/FilterInput.vue @@ -13,11 +13,11 @@ import ProjectUserService from '@/services/projectUsers' import {useProjectStore} from '@/stores/projects' const { - projectId, modelValue, + projectId, } = defineProps<{ - projectId?: number, modelValue: string, + projectId?: number, }>() const emit = defineEmits(['update:modelValue']) diff --git a/frontend/src/components/project/partials/filter-popup.vue b/frontend/src/components/project/partials/filter-popup.vue index aec51390b..b523a887a 100644 --- a/frontend/src/components/project/partials/filter-popup.vue +++ b/frontend/src/components/project/partials/filter-popup.vue @@ -34,29 +34,24 @@ import {computed, ref, watch} from 'vue' import Filters from '@/components/project/partials/filters.vue' -import {getDefaultParams} from '@/composables/useTaskList' +import {getDefaultTaskFilterParams, type TaskFilterParams} from '@/services/taskCollection' -const props = defineProps({ - modelValue: { - required: true, - }, -}) -const emit = defineEmits(['update:modelValue']) +const modelValue = defineModel() -const value = computed({ +const value = computed({ get() { - return props.modelValue + return modelValue.value }, set(value) { - if(props.modelValue === value) { + if(modelValue === value) { return } - emit('update:modelValue', value) + modelValue.value = value }, }) watch( - () => props.modelValue, + () => modelValue, (modelValue) => { value.value = modelValue }, @@ -66,15 +61,12 @@ watch( const hasFilters = computed(() => { // this.value also contains the page parameter which we don't want to include in filters // eslint-disable-next-line no-unused-vars - const {filter_by, filter_value, filter_comparator, filter_concat, s} = value.value - const def = {...getDefaultParams()} + const {filter, s} = value.value + const def = {...getDefaultTaskFilterParams()} - const params = {filter_by, filter_value, filter_comparator, filter_concat, s} + const params = {filter, s} const defaultParams = { - filter_by: def.filter_by, - filter_value: def.filter_value, - filter_comparator: def.filter_comparator, - filter_concat: def.filter_concat, + filter: def.filter, s: s ? def.s : undefined, } @@ -84,7 +76,7 @@ const hasFilters = computed(() => { const modalOpen = ref(false) function clearFilters() { - value.value = {...getDefaultParams()} + value.value = {...getDefaultTaskFilterParams()} } diff --git a/frontend/src/composables/useTaskList.ts b/frontend/src/composables/useTaskList.ts index e1be96460..51e874c4d 100644 --- a/frontend/src/composables/useTaskList.ts +++ b/frontend/src/composables/useTaskList.ts @@ -2,7 +2,7 @@ import {ref, shallowReactive, watch, computed, type ComputedGetter} from 'vue' import {useRoute} from 'vue-router' import {useRouteQuery} from '@vueuse/router' -import TaskCollectionService from '@/services/taskCollection' +import TaskCollectionService, {getDefaultTaskFilterParams} from '@/services/taskCollection' import type {ITask} from '@/modelTypes/ITask' import {error} from '@/message' import type {IProject} from '@/modelTypes/IProject' @@ -24,16 +24,6 @@ export interface SortBy { done_at?: Order, } -// FIXME: merge with DEFAULT_PARAMS in filters.vue -export const getDefaultParams = () => ({ - sort_by: ['position', 'id'], - order_by: ['asc', 'desc'], - filter_by: ['done'], - filter_value: ['false'], - filter_comparator: ['equals'], - filter_concat: 'and', -}) - const SORT_BY_DEFAULT: SortBy = { id: 'desc', } @@ -67,7 +57,7 @@ export function useTaskList(projectIdGetter: ComputedGetter, sor const projectId = computed(() => projectIdGetter()) - const params = ref({...getDefaultParams()}) + const params = ref({...getDefaultTaskFilterParams()}) const search = ref('') const page = useRouteQuery('page', '1', { transform: Number }) diff --git a/frontend/src/services/taskCollection.ts b/frontend/src/services/taskCollection.ts index 14abe9a3c..0c8a13f06 100644 --- a/frontend/src/services/taskCollection.ts +++ b/frontend/src/services/taskCollection.ts @@ -4,13 +4,23 @@ import TaskModel from '@/models/task' import type {ITask} from '@/modelTypes/ITask' export interface TaskFilterParams { - sort_by: ('start_date' | 'done' | 'id')[], + sort_by: ('start_date' | 'done' | 'id' | 'position')[], order_by: ('asc' | 'desc')[], filter: string, filter_include_nulls: boolean, s: string, } +export function getDefaultTaskFilterParams(): TaskFilterParams { + return { + sort_by: ['position', 'id'], + order_by: ['asc', 'desc'], + filter: '', + filter_include_nulls: false, + s: '', + } +} + export default class TaskCollectionService extends AbstractService { constructor() { super({