1
0

fix(filter): correctly pass down options

This commit is contained in:
kolaente 2024-03-08 13:19:56 +01:00
parent a22652b737
commit b35eb4adbf
No known key found for this signature in database
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' import {useProjectStore} from '@/stores/projects'
const { const {
projectId,
modelValue, modelValue,
projectId,
} = defineProps<{ } = defineProps<{
projectId?: number,
modelValue: string, modelValue: string,
projectId?: number,
}>() }>()
const emit = defineEmits(['update:modelValue']) 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 Filters from '@/components/project/partials/filters.vue'
import {getDefaultParams} from '@/composables/useTaskList' import {getDefaultTaskFilterParams, type TaskFilterParams} from '@/services/taskCollection'
const props = defineProps({ const modelValue = defineModel<TaskFilterParams>()
modelValue: {
required: true,
},
})
const emit = defineEmits(['update:modelValue'])
const value = computed({ const value = computed<TaskFilterParams>({
get() { get() {
return props.modelValue return modelValue.value
}, },
set(value) { set(value) {
if(props.modelValue === value) { if(modelValue === value) {
return return
} }
emit('update:modelValue', value) modelValue.value = value
}, },
}) })
watch( watch(
() => props.modelValue, () => modelValue,
(modelValue) => { (modelValue) => {
value.value = modelValue value.value = modelValue
}, },
@ -66,15 +61,12 @@ watch(
const hasFilters = computed(() => { const hasFilters = computed(() => {
// this.value also contains the page parameter which we don't want to include in filters // this.value also contains the page parameter which we don't want to include in filters
// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-unused-vars
const {filter_by, filter_value, filter_comparator, filter_concat, s} = value.value const {filter, s} = value.value
const def = {...getDefaultParams()} const def = {...getDefaultTaskFilterParams()}
const params = {filter_by, filter_value, filter_comparator, filter_concat, s} const params = {filter, s}
const defaultParams = { const defaultParams = {
filter_by: def.filter_by, filter: def.filter,
filter_value: def.filter_value,
filter_comparator: def.filter_comparator,
filter_concat: def.filter_concat,
s: s ? def.s : undefined, s: s ? def.s : undefined,
} }
@ -84,7 +76,7 @@ const hasFilters = computed(() => {
const modalOpen = ref(false) const modalOpen = ref(false)
function clearFilters() { function clearFilters() {
value.value = {...getDefaultParams()} value.value = {...getDefaultTaskFilterParams()}
} }
</script> </script>

View File

@ -2,7 +2,7 @@ import {ref, shallowReactive, watch, computed, type ComputedGetter} from 'vue'
import {useRoute} from 'vue-router' import {useRoute} from 'vue-router'
import {useRouteQuery} from '@vueuse/router' import {useRouteQuery} from '@vueuse/router'
import TaskCollectionService from '@/services/taskCollection' import TaskCollectionService, {getDefaultTaskFilterParams} from '@/services/taskCollection'
import type {ITask} from '@/modelTypes/ITask' import type {ITask} from '@/modelTypes/ITask'
import {error} from '@/message' import {error} from '@/message'
import type {IProject} from '@/modelTypes/IProject' import type {IProject} from '@/modelTypes/IProject'
@ -24,16 +24,6 @@ export interface SortBy {
done_at?: Order, 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 = { const SORT_BY_DEFAULT: SortBy = {
id: 'desc', id: 'desc',
} }
@ -67,7 +57,7 @@ export function useTaskList(projectIdGetter: ComputedGetter<IProject['id']>, sor
const projectId = computed(() => projectIdGetter()) const projectId = computed(() => projectIdGetter())
const params = ref({...getDefaultParams()}) const params = ref({...getDefaultTaskFilterParams()})
const search = ref('') const search = ref('')
const page = useRouteQuery('page', '1', { transform: Number }) const page = useRouteQuery('page', '1', { transform: Number })

View File

@ -4,13 +4,23 @@ import TaskModel from '@/models/task'
import type {ITask} from '@/modelTypes/ITask' import type {ITask} from '@/modelTypes/ITask'
export interface TaskFilterParams { export interface TaskFilterParams {
sort_by: ('start_date' | 'done' | 'id')[], sort_by: ('start_date' | 'done' | 'id' | 'position')[],
order_by: ('asc' | 'desc')[], order_by: ('asc' | 'desc')[],
filter: string, filter: string,
filter_include_nulls: boolean, filter_include_nulls: boolean,
s: string, 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> { export default class TaskCollectionService extends AbstractService<ITask> {
constructor() { constructor() {
super({ super({