feat(gantt): reset gantt filter

This commit is contained in:
Dominik Pschenitschni 2022-10-24 15:51:50 +02:00 committed by kolaente
parent 6bf6357cbd
commit 52d4d0bdb9
Signed by: konrad
GPG Key ID: F40E70337AB24C9B
5 changed files with 706 additions and 656 deletions

View File

@ -41,6 +41,7 @@
"dayjs": "^1.11.5", "dayjs": "^1.11.5",
"dompurify": "2.4.0", "dompurify": "2.4.0",
"easymde": "2.18.0", "easymde": "2.18.0",
"fast-deep-equal": "^3.1.3",
"flatpickr": "4.6.13", "flatpickr": "4.6.13",
"flexsearch": "0.7.21", "flexsearch": "0.7.21",
"floating-vue": "2.0.0-beta.20", "floating-vue": "2.0.0-beta.20",

File diff suppressed because it is too large Load Diff

View File

@ -1,11 +1,13 @@
import {computed, ref, watch, type Ref} from 'vue' import {computed, ref, watch, type Ref} from 'vue'
import {useRouter, type RouteLocationNormalized, type RouteLocationRaw} from 'vue-router' import {useRouter, type RouteLocationNormalized, type RouteLocationRaw} from 'vue-router'
import cloneDeep from 'lodash.clonedeep' import cloneDeep from 'lodash.clonedeep'
import equal from 'fast-deep-equal/es6'
export type Filters = Record<string, any> export type Filters = Record<string, any>
export function useRouteFilters<CurrentFilters extends Filters>( export function useRouteFilters<CurrentFilters extends Filters>(
route: Ref<RouteLocationNormalized>, route: Ref<RouteLocationNormalized>,
getDefaultFilters: (route: RouteLocationNormalized) => CurrentFilters,
routeToFilters: (route: RouteLocationNormalized) => CurrentFilters, routeToFilters: (route: RouteLocationNormalized) => CurrentFilters,
filtersToRoute: (filters: CurrentFilters) => RouteLocationRaw, filtersToRoute: (filters: CurrentFilters) => RouteLocationRaw,
) { ) {
@ -37,7 +39,17 @@ export function useRouteFilters<CurrentFilters extends Filters>(
{flush: 'post'}, {flush: 'post'},
) )
const hasDefaultFilters = computed(() => {
return equal(filters.value, getDefaultFilters(route.value))
})
function setDefaultFilters() {
filters.value = getDefaultFilters(route.value)
}
return { return {
filters, filters,
hasDefaultFilters,
setDefaultFilters,
} }
} }

View File

@ -16,6 +16,12 @@
/> />
</div> </div>
</div> </div>
<div class="field" v-if="!hasDefaultFilters">
<label class="label" for="range">Reset</label>
<div class="control">
<x-button @click="setDefaultFilters">Reset</x-button>
</div>
</div>
<fancycheckbox class="is-block" v-model="filters.showTasksWithoutDates"> <fancycheckbox class="is-block" v-model="filters.showTasksWithoutDates">
{{ $t('list.gantt.showTasksWithoutDates') }} {{ $t('list.gantt.showTasksWithoutDates') }}
</fancycheckbox> </fancycheckbox>
@ -74,6 +80,8 @@ const canWrite = computed(() => baseStore.currentList.maxRight > RIGHTS.READ)
const {route} = toRefs(props) const {route} = toRefs(props)
const { const {
filters, filters,
hasDefaultFilters,
setDefaultFilters,
tasks, tasks,
isLoading, isLoading,
addTask, addTask,

View File

@ -47,6 +47,10 @@ function ganttRouteToFilters(route: Partial<RouteLocationNormalized>): GanttFilt
} }
} }
function ganttGetDefaultFilters(route: Partial<RouteLocationNormalized>): GanttFilters {
return ganttRouteToFilters({params: {listId: route.params?.listId as string}})
}
// FIXME: use zod for this // FIXME: use zod for this
function ganttFiltersToRoute(filters: GanttFilters): RouteLocationRaw { function ganttFiltersToRoute(filters: GanttFilters): RouteLocationRaw {
let query: Record<string, string> = {} let query: Record<string, string> = {}
@ -88,9 +92,12 @@ export type UseGanttFiltersReturn = ReturnType<typeof useRouteFilters> & ReturnT
export function useGanttFilters(route: Ref<RouteLocationNormalized>): UseGanttFiltersReturn { export function useGanttFilters(route: Ref<RouteLocationNormalized>): UseGanttFiltersReturn {
const { const {
filters, filters,
hasDefaultFilters,
setDefaultFilters,
} = useRouteFilters<GanttFilters>( } = useRouteFilters<GanttFilters>(
route, route,
ganttRouteToFilters, ganttRouteToFilters,
ganttGetDefaultFilters,
ganttFiltersToRoute ganttFiltersToRoute
) )
@ -105,6 +112,8 @@ export function useGanttFilters(route: Ref<RouteLocationNormalized>): UseGanttFi
return { return {
filters, filters,
hasDefaultFilters,
setDefaultFilters,
tasks, tasks,
loadTasks, loadTasks,