@@ -2,39 +2,39 @@ import { ref, computed, onMounted } from 'vue';
22import { router , usePage } from '@inertiajs/vue3' ;
33import { FilterMatchMode } from '@primevue/core/api' ;
44import debounce from 'lodash-es/debounce' ;
5- import * as PrimeVue from '@/types/primevue' ;
6-
7- interface PageStateEvent {
8- first : number ;
9- rows : number ;
10- page : number ;
11- pageCount : number ;
5+ import cloneDeep from 'lodash-es/cloneDeep' ;
6+ import { PageState , DataTablePageEvent } from 'primevue' ;
7+ import { PrimeVueDataFilters } from '@/types' ;
8+
9+ interface PaginatedFilteredSortedQueryParams {
10+ filters ?: PrimeVueDataFilters ;
11+ page ?: string ;
12+ rows ?: string ;
13+ sortField ?: string ;
14+ sortOrder ?: string ;
1215}
1316interface PaginationState {
1417 page : number ;
1518 rows : number ;
1619}
1720interface SortState {
18- field : undefined | string ;
19- order : undefined | null | 0 | 1 | - 1 ;
21+ field : string ;
22+ order : number ;
2023}
2124
2225export function usePaginatedData (
23- initialFilters : PrimeVue . PaginatedDataFilters = { } ,
26+ initialFilters : PrimeVueDataFilters = { } ,
2427 only : string [ ] = [ 'request' ] ,
2528 initialsRows : number = 20
2629) {
27- const defaultFilters = initialFilters ;
28- const defaultRows = initialsRows ;
29-
3030 const page = usePage < {
3131 request : {
32- urlParams : PrimeVue . PaginatedDataUrlParams ;
32+ urlParams : PaginatedFilteredSortedQueryParams ;
3333 } ;
3434 } > ( ) ;
3535
3636 const processing = ref < boolean > ( false ) ;
37- const filters = ref < PrimeVue . PaginatedDataFilters > ( initialFilters ) ;
37+ const filters = ref < PrimeVueDataFilters > ( cloneDeep ( initialFilters ) ) ;
3838 const sorting = ref < SortState > ( {
3939 field : '' ,
4040 order : 1 ,
@@ -76,7 +76,7 @@ export function usePaginatedData(
7676 router . reload ( {
7777 only : [ 'request' , ...new Set ( only ) ] ,
7878 data : {
79- filters : filters . value ,
79+ filters : filters . value as any ,
8080 ...pagination . value ,
8181 sortField : sorting . value . field ,
8282 sortOrder : sorting . value . order ,
@@ -95,9 +95,9 @@ export function usePaginatedData(
9595 } ) ;
9696 }
9797
98- function paginate ( pageStateEvent : PageStateEvent ) {
99- pagination . value . page = pageStateEvent . page + 1 ;
100- pagination . value . rows = pageStateEvent . rows ;
98+ function paginate ( event : PageState | DataTablePageEvent ) {
99+ pagination . value . page = event . page + 1 ;
100+ pagination . value . rows = event . rows ;
101101 fetchData ( ) . then ( ( ) => {
102102 scrollToTop ( ) ;
103103 } ) ;
@@ -114,6 +114,7 @@ export function usePaginatedData(
114114 // Alternatively just use: router.get(window.location.pathname);
115115 // Caveat to the above approach, we would lose state from our page not related to pagination/filtering/sorting
116116
117+ const defaultFilters = cloneDeep ( initialFilters ) ;
117118 Object . keys ( defaultFilters ) . forEach ( ( key ) => {
118119 filters . value [ key ] . value = defaultFilters [ key ] . value ;
119120 } ) ;
@@ -123,7 +124,7 @@ export function usePaginatedData(
123124 } ;
124125 pagination . value = {
125126 page : 1 ,
126- rows : defaultRows ,
127+ rows : initialsRows ,
127128 } ;
128129 fetchData ( ) . then ( ( ) => {
129130 window . history . replaceState ( null , '' , window . location . pathname ) ;
@@ -167,18 +168,17 @@ export function usePaginatedData(
167168 } ) ;
168169 }
169170
170- function parseUrlParams ( urlParams : PrimeVue . PaginatedDataUrlParams ) {
171+ function parseUrlParams ( urlParams : PaginatedFilteredSortedQueryParams ) {
171172 filters . value = {
172- ...defaultFilters ,
173+ ...cloneDeep ( initialFilters ) ,
173174 ...urlParams ?. filters ,
174175 } ;
175176 parseUrlFilterValues ( ) ;
176177 if ( urlParams ?. sortField ) {
177178 sorting . value . field = urlParams . sortField ;
178179 }
179180 if ( urlParams ?. sortOrder ) {
180- sorting . value . order =
181- ( parseInt ( urlParams . sortOrder ) as 0 | 1 | - 1 ) || null ;
181+ sorting . value . order = parseInt ( urlParams . sortOrder ) ;
182182 }
183183 if ( urlParams ?. page ) {
184184 pagination . value . page = parseInt ( urlParams . page ) ;
0 commit comments