fix(filter): correctly pass down options

This commit is contained in:
kolaente 2024-03-08 13:19:56 +01:00
parent a22652b737
commit b35eb4adbf
Signed by: konrad
GPG Key ID: F40E70337AB24C9B
4 changed files with 27 additions and 35 deletions

View File

@ -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'])

View File

@ -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<TaskFilterParams>()
const value = computed({
const value = computed<TaskFilterParams>({
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()}
}
</script>

View File

@ -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<IProject['id']>, sor
const projectId = computed(() => projectIdGetter())
const params = ref({...getDefaultParams()})
const params = ref({...getDefaultTaskFilterParams()})
const search = ref('')
const page = useRouteQuery('page', '1', { transform: Number })

View File

@ -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<ITask> {
constructor() {
super({