@@ -48,6 +48,7 @@ const refetch = () => {
48
48
* @param {Number } props.page: Optional. The initial page index
49
49
* @param {Number } props.perPage: Optional. The initial page size
50
50
* @param {SortPayload } props.sort: Optional. The initial sort (field and order)
51
+ * @param {filterCallback } prop.filterCallback Optional. A function that allows you to make a custom filter
51
52
*/
52
53
export const useList = < RecordType extends RaRecord = any > (
53
54
props : UseListOptions < RecordType >
@@ -61,6 +62,7 @@ export const useList = <RecordType extends RaRecord = any>(
61
62
page : initialPage = 1 ,
62
63
perPage : initialPerPage = 1000 ,
63
64
sort : initialSort ,
65
+ filterCallback = ( record : RecordType ) => Boolean ( record ) ,
64
66
} = props ;
65
67
const resource = useResourceContext ( props ) ;
66
68
@@ -161,23 +163,25 @@ export const useList = <RecordType extends RaRecord = any>(
161
163
162
164
// 1. filter
163
165
if ( filterValues ) {
164
- tempData = data . filter ( record =>
165
- Object . entries ( filterValues ) . every (
166
- ( [ filterName , filterValue ] ) => {
167
- const recordValue = get ( record , filterName ) ;
168
- const result = Array . isArray ( recordValue )
169
- ? Array . isArray ( filterValue )
170
- ? recordValue . some ( item =>
171
- filterValue . includes ( item )
172
- )
173
- : recordValue . includes ( filterValue )
174
- : Array . isArray ( filterValue )
175
- ? filterValue . includes ( recordValue )
176
- : filterValue == recordValue ; // eslint-disable-line eqeqeq
177
- return result ;
178
- }
166
+ tempData = data
167
+ . filter ( record =>
168
+ Object . entries ( filterValues ) . every (
169
+ ( [ filterName , filterValue ] ) => {
170
+ const recordValue = get ( record , filterName ) ;
171
+ const result = Array . isArray ( recordValue )
172
+ ? Array . isArray ( filterValue )
173
+ ? recordValue . some ( item =>
174
+ filterValue . includes ( item )
175
+ )
176
+ : recordValue . includes ( filterValue )
177
+ : Array . isArray ( filterValue )
178
+ ? filterValue . includes ( recordValue )
179
+ : filterValue == recordValue ; // eslint-disable-line eqeqeq
180
+ return result ;
181
+ }
182
+ )
179
183
)
180
- ) ;
184
+ . filter ( filterCallback ) ;
181
185
}
182
186
const filteredLength = tempData . length ;
183
187
@@ -269,6 +273,7 @@ export interface UseListOptions<RecordType extends RaRecord = any> {
269
273
perPage ?: number ;
270
274
sort ?: SortPayload ;
271
275
resource ?: string ;
276
+ filterCallback ?: ( record : RecordType ) => boolean ;
272
277
}
273
278
274
279
export type UseListValue <
0 commit comments