From 3d5d7c7424bd182e90fb11de880c024d273f50c0 Mon Sep 17 00:00:00 2001 From: zhong666 Date: Sun, 12 Jan 2025 23:45:58 +0800 Subject: [PATCH] fix: pagination will restore (#34) --- packages/core/src/controller/list.ts | 24 ++++++++++++++++---- stories/vue/src/ListFilters.vue | 16 ++++++++----- stories/vue/src/ListSorters.vue | 34 +++++++++++++++++----------- 3 files changed, 50 insertions(+), 24 deletions(-) diff --git a/packages/core/src/controller/list.ts b/packages/core/src/controller/list.ts index 1193b02..a43dc34 100644 --- a/packages/core/src/controller/list.ts +++ b/packages/core/src/controller/list.ts @@ -644,10 +644,19 @@ export function resolveSorters( permanent: Sorters | undefined, value: Sorters | undefined, ): Sorters | undefined { - if (permanent || value) { - return unionWith(permanent, value, compareSort) - .filter(filterSort) - } + if (permanent == null && value == null) + return + + const result = unionWith( + permanent, + value, + compareSort, + ).filter(filterSort) + + if (result.length === 0) + return DEFAULT_SORTERS + + return result } export interface GetDataProps< @@ -751,12 +760,17 @@ export function resolveFilters( value: Filters | undefined, prev?: Filters, ): Filters | undefined { - return unionWith( + const result = unionWith( permanent, value, prev, compareFilter, ).filter(filterFilter) + + if (result.length === 0) + return DEFAULT_FILTERS + + return result } function checkFiltersValue( diff --git a/stories/vue/src/ListFilters.vue b/stories/vue/src/ListFilters.vue index 0c26412..4bc2afd 100644 --- a/stories/vue/src/ListFilters.vue +++ b/stories/vue/src/ListFilters.vue @@ -2,7 +2,7 @@ import type { Post } from './api/posts' import { FilterOperator } from '@ginjou/core' import { useList } from '@ginjou/vue' -import { reactive, watchPostEffect } from 'vue' +import { reactive, unref, watch } from 'vue' import { useRoute } from 'vue-router' const route = useRoute() @@ -19,23 +19,27 @@ const formData = reactive({ id: '', }) -watchPostEffect(() => { +watch(() => unref(formData), (data) => { filters.value = [ - formData.title + data.title ? { field: 'title', operator: FilterOperator.contains, - value: formData.title, + value: data.title, } : undefined as any, - formData.id + data.id ? { field: 'id', operator: FilterOperator.eq, - value: formData.id, + value: data.id, } : undefined as any, ].filter(Boolean) +}, { + flush: 'post', + deep: true, + immediate: true, }) diff --git a/stories/vue/src/ListSorters.vue b/stories/vue/src/ListSorters.vue index 725a6b3..5857c8f 100644 --- a/stories/vue/src/ListSorters.vue +++ b/stories/vue/src/ListSorters.vue @@ -1,7 +1,7 @@