@@ -45,6 +45,8 @@ export function useFields<T extends Zaak = Zaak>(
45
45
(
46
46
filterData : Partial < TypedSerializedFormData < keyof T & string > > ,
47
47
) => FilterTransformReturnType < T > ,
48
+ Record < string , string > ,
49
+ ( ) => void ,
48
50
] {
49
51
const [ fieldSelectionState , setFieldSelectionState ] =
50
52
useState < FieldSelection > ( ) ;
@@ -53,7 +55,7 @@ export function useFields<T extends Zaak = Zaak>(
53
55
setFieldSelectionState ( fieldSelection ) ,
54
56
) ;
55
57
} , [ ] ) ;
56
- const [ searchParams ] = useSearchParams ( ) ;
58
+ const [ searchParams , setSearchParams ] = useSearchParams ( ) ;
57
59
const selectielijstKlasseChoices = useSelectielijstKlasseChoices ( ) ;
58
60
const zaaktypeChoices = useZaaktypeChoices (
59
61
destructionList ,
@@ -62,8 +64,9 @@ export function useFields<T extends Zaak = Zaak>(
62
64
) ;
63
65
64
66
// The raw, unfiltered configuration of the available base fields.
67
+ // Both filterLookup AND filterLookups will be used for clearing filters.
65
68
// NOTE: This get filtered by `getActiveFields()`.
66
- const fields : TypedField < T > [ ] = [
69
+ const fields : ( TypedField < T > & { filterLookups ?: string [ ] } ) [ ] = [
67
70
{
68
71
name : "identificatie" ,
69
72
filterLookup : "identificatie__icontains" ,
@@ -96,6 +99,7 @@ export function useFields<T extends Zaak = Zaak>(
96
99
{
97
100
name : "startdatum" ,
98
101
type : "daterange" ,
102
+ filterLookups : [ "startdatum__gte" , "startdatum__lte" ] ,
99
103
filterValue :
100
104
searchParams . get ( "startdatum__gte" ) &&
101
105
searchParams . get ( "startdatum__lte" )
@@ -108,6 +112,7 @@ export function useFields<T extends Zaak = Zaak>(
108
112
{
109
113
name : "einddatum" ,
110
114
type : "daterange" ,
115
+ filterLookups : [ "einddatum__gte" , "einddatum__lte" ] ,
111
116
filterValue :
112
117
searchParams . get ( "einddatum__gte" ) && searchParams . get ( "einddatum__lte" )
113
118
? `${ searchParams . get ( "einddatum__gte" ) } /${ searchParams . get ( "einddatum__lte" ) } `
@@ -162,6 +167,7 @@ export function useFields<T extends Zaak = Zaak>(
162
167
name : "archiefactiedatum" ,
163
168
type : "daterange" ,
164
169
width : "130px" ,
170
+ filterLookups : [ "archiefactiedatum__gte" , "archiefactiedatum__lte" ] ,
165
171
filterValue :
166
172
searchParams . get ( "archiefactiedatum__gte" ) &&
167
173
searchParams . get ( "archiefactiedatum__lte" )
@@ -206,6 +212,17 @@ export function useFields<T extends Zaak = Zaak>(
206
212
...( extraFields || [ ] ) ,
207
213
] ;
208
214
215
+ const filterLookupValues = [
216
+ ...new Set (
217
+ fields
218
+ . flatMap ( ( field ) => [
219
+ field . filterLookup ,
220
+ ...( field . filterLookups || [ ] ) ,
221
+ ] )
222
+ . filter ( Boolean ) ,
223
+ ) ,
224
+ ] ;
225
+
209
226
const getActiveFields = useCallback ( ( ) => {
210
227
return fields . map ( ( field ) => {
211
228
const isActiveFromStorage =
@@ -214,10 +231,38 @@ export function useFields<T extends Zaak = Zaak>(
214
231
typeof isActiveFromStorage === "undefined"
215
232
? field . active !== false
216
233
: isActiveFromStorage ;
217
- return { ...field , active : isActive } as TypedField ;
234
+ return { ...field , active : isActive } ;
218
235
} ) ;
219
236
} , [ fields , fieldSelectionState ] ) ;
220
237
238
+ /**
239
+ * Function to reset all the filters
240
+ * It will concat all the `filterLookup` and `filterLookups` values from the `fields` array and remove them from the searchParams
241
+ */
242
+ const resetFilters = ( ) => {
243
+ const newSearchParams = new URLSearchParams ( searchParams ) ;
244
+ filterLookupValues . forEach ( ( filterLookup ) => {
245
+ if ( ! filterLookup ) return ;
246
+ newSearchParams . delete ( filterLookup ) ;
247
+ } ) ;
248
+ setSearchParams ( newSearchParams ) ;
249
+ } ;
250
+
251
+ /**
252
+ * A function to return the current active filters
253
+ */
254
+ const getActiveFilters = ( ) => {
255
+ const activeFilters : Record < string , string > = { } ;
256
+ filterLookupValues . forEach ( ( filterLookup ) => {
257
+ if ( ! filterLookup ) return ;
258
+ const value = searchParams . get ( filterLookup ) ;
259
+ if ( value ) {
260
+ activeFilters [ filterLookup ] = value ;
261
+ }
262
+ } ) ;
263
+ return activeFilters ;
264
+ } ;
265
+
221
266
/**
222
267
* Gets called when the fields selection is changed.
223
268
* Pass this to `filterTransform` of a DataGrid component.
@@ -267,5 +312,11 @@ export function useFields<T extends Zaak = Zaak>(
267
312
} ;
268
313
} ;
269
314
270
- return [ getActiveFields ( ) , setFields , filterTransform ] ;
315
+ return [
316
+ getActiveFields ( ) ,
317
+ setFields ,
318
+ filterTransform ,
319
+ getActiveFilters ( ) ,
320
+ resetFilters ,
321
+ ] ;
271
322
}
0 commit comments