This repository has been archived on 2024-02-08. You can view files and clone it, but cannot push or open issues or pull requests.
frontend/src/components/list/partials/filter-popup.vue

99 lines
1.9 KiB
Vue

<template>
<x-button
v-if="hasFilters"
variant="secondary"
@click="clearFilters"
>
{{ $t('filters.clear') }}
</x-button>
<x-button
@click="() => modalOpen = true"
variant="secondary"
icon="filter"
>
{{ $t('filters.title') }}
</x-button>
<modal
@close="() => modalOpen = false"
:enabled="modalOpen"
transition-name="fade"
:overflow="true"
variant="hint-modal"
>
<Filters
:has-title="true"
v-model="value"
ref="filters"
class="filter-popup"
/>
</modal>
</template>
<script setup lang="ts">
import {computed, ref, watch, type PropType} from 'vue'
import Filters from '@/components/list/partials/filters.vue'
import {getDefaultParams} from '@/composables/taskList'
import type {IParams} from '@/types/IParams'
const props = defineProps({
modelValue: {
type: Object as PropType<IParams>,
required: true,
},
})
const emit = defineEmits(['update:modelValue'])
const value = computed({
get() {
return props.modelValue
},
set(value) {
emit('update:modelValue', value)
},
})
watch(
() => props.modelValue,
(modelValue) => {
value.value = modelValue
},
{immediate: true},
)
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 {filterBy, filterValue, filterComparator, filterConcat, s} = value.value
const def = {...getDefaultParams()}
const params = {filterBy, filterValue, filterComparator, filterConcat, s}
const defaultParams = {
filterBy: def.filterBy,
filterValue: def.filterValue,
filterComparator: def.filterComparator,
filterConcat: def.filterConcat,
s: s ? def.s : undefined,
}
return JSON.stringify(params) !== JSON.stringify(defaultParams)
})
const modalOpen = ref(false)
function clearFilters() {
value.value = {...getDefaultParams()}
}
</script>
<style scoped lang="scss">
.filter-popup {
margin: 0;
&.is-open {
margin: 2rem 0 1rem;
}
}
</style>