@@ -197,52 +197,63 @@ const useListParams = ({
197
197
) ;
198
198
const displayedFilterValues = query . displayedFilters || emptyObject ;
199
199
200
- const debouncedSetFilters = lodashDebounce (
201
- ( newFilters , newDisplayedFilters ) => {
202
- let payload = {
203
- filter : removeEmpty ( newFilters ) ,
204
- displayedFilters : undefined ,
205
- } ;
206
- if ( newDisplayedFilters ) {
207
- payload . displayedFilters = Object . keys (
208
- newDisplayedFilters
209
- ) . reduce ( ( filters , filter ) => {
210
- return newDisplayedFilters [ filter ]
211
- ? { ...filters , [ filter ] : true }
212
- : filters ;
213
- } , { } ) ;
214
- }
215
- changeParams ( {
216
- type : SET_FILTER ,
217
- payload,
218
- } ) ;
219
- } ,
220
- debounce
221
- ) ;
200
+ const debouncedSetFilters = lodashDebounce ( ( filter , displayedFilters ) => {
201
+ changeParams ( {
202
+ type : SET_FILTER ,
203
+ payload : {
204
+ filter : removeEmpty ( filter ) ,
205
+ displayedFilters,
206
+ } ,
207
+ } ) ;
208
+ } , debounce ) ;
222
209
223
210
const setFilters = useCallback (
224
- ( filters , displayedFilters ) =>
225
- debouncedSetFilters ( filters , displayedFilters ) ,
211
+ ( filter , displayedFilters , debounce = true ) =>
212
+ debounce
213
+ ? debouncedSetFilters ( filter , displayedFilters )
214
+ : changeParams ( {
215
+ type : SET_FILTER ,
216
+ payload : {
217
+ filter : removeEmpty ( filter ) ,
218
+ displayedFilters,
219
+ } ,
220
+ } ) ,
226
221
requestSignature // eslint-disable-line react-hooks/exhaustive-deps
227
222
) ;
228
223
229
224
const hideFilter = useCallback ( ( filterName : string ) => {
230
- const newFilters = removeKey ( filterValues , filterName ) ;
231
- const newDisplayedFilters = {
232
- ...displayedFilterValues ,
233
- [ filterName ] : undefined ,
234
- } ;
235
-
236
- setFilters ( newFilters , newDisplayedFilters ) ;
225
+ // we don't use lodash.set() for displayed filters
226
+ // to avoid problems with compound filter names (e.g. 'author.name')
227
+ const displayedFilters = Object . keys ( displayedFilterValues ) . reduce (
228
+ ( filters , filter ) => {
229
+ return filter !== filterName
230
+ ? { ...filters , [ filter ] : true }
231
+ : filters ;
232
+ } ,
233
+ { }
234
+ ) ;
235
+ const filter = removeEmpty ( removeKey ( filterValues , filterName ) ) ;
236
+ changeParams ( {
237
+ type : SET_FILTER ,
238
+ payload : { filter, displayedFilters } ,
239
+ } ) ;
237
240
} , requestSignature ) ; // eslint-disable-line react-hooks/exhaustive-deps
238
241
239
242
const showFilter = useCallback ( ( filterName : string , defaultValue : any ) => {
240
- const newFilters = set ( filterValues , filterName , defaultValue ) ;
241
- const newDisplayedFilters = {
243
+ // we don't use lodash.set() for displayed filters
244
+ // to avoid problems with compound filter names (e.g. 'author.name')
245
+ const displayedFilters = {
242
246
...displayedFilterValues ,
243
247
[ filterName ] : true ,
244
248
} ;
245
- setFilters ( newFilters , newDisplayedFilters ) ;
249
+ const filter = set ( filterValues , filterName , defaultValue ) ;
250
+ changeParams ( {
251
+ type : SET_FILTER ,
252
+ payload : {
253
+ filter,
254
+ displayedFilters,
255
+ } ,
256
+ } ) ;
246
257
} , requestSignature ) ; // eslint-disable-line react-hooks/exhaustive-deps
247
258
248
259
return [
0 commit comments