1
- import React , { FC , ReactNode , useCallback , useEffect , useMemo , useState } from 'react' ;
1
+ import React , { FC , ReactNode , useEffect , useMemo , useState } from 'react' ;
2
2
import { useForkliftTranslation } from 'src/utils/i18n' ;
3
3
4
4
import {
@@ -294,8 +294,9 @@ export function StandardPage<T>({
294
294
t,
295
295
i18n : { resolvedLanguage } ,
296
296
} = useForkliftTranslation ( ) ;
297
- const [ page , setPage ] = useState ( initialPage ) ;
297
+ const [ sortedData , setSortedData ] = useState ( [ ] ) ;
298
298
const [ filteredData , setFilteredData ] = useState ( [ ] ) ;
299
+ const [ page , setPage ] = useState ( initialPage ) ;
299
300
300
301
const [ selectedFilters , setSelectedFilters ] = useUrlFilters ( {
301
302
fields : fieldsMetadata ,
@@ -312,26 +313,22 @@ export function StandardPage<T>({
312
313
? { ...defaultSupportedFilters , ...extraSupportedFilters }
313
314
: defaultSupportedFilters ;
314
315
315
- const performFilterAndSort = useCallback ( async ( ) => {
316
- const result : T [ ] = await new Promise ( ( resolve ) => {
317
- const filtered = flatData
318
- . filter ( createMetaMatcher ( selectedFilters , fields , supportedMatchers ) )
319
- . sort ( compareFn ) ;
320
- resolve ( filtered ) ;
321
- } ) ;
322
-
323
- setFilteredData ( result ) ;
324
- } , [ flatData , selectedFilters , fields , compareFn ] ) ;
316
+ useEffect ( ( ) => {
317
+ if ( flatData ) {
318
+ setSortedData ( [ ...flatData ] . sort ( compareFn ) ) ;
319
+ }
320
+ } , [ flatData , compareFn , loaded ] ) ;
325
321
326
322
useEffect ( ( ) => {
327
- if ( ! loaded ) {
328
- return ; // Prevent filter and sort if loaded is false
323
+ if ( sortedData ) {
324
+ setFilteredData (
325
+ sortedData . filter ( createMetaMatcher ( selectedFilters , fields , supportedMatchers ) ) ,
326
+ ) ;
329
327
}
330
- performFilterAndSort ( ) ;
331
- } , [ flatData , selectedFilters , fields , compareFn , loaded ] ) ;
328
+ } , [ sortedData , selectedFilters , fields ] ) ;
332
329
333
330
const showPagination =
334
- pagination === 'on' || ( typeof pagination === 'number' && flatData . length > pagination ) ;
331
+ pagination === 'on' || ( typeof pagination === 'number' && sortedData . length > pagination ) ;
335
332
336
333
const { itemsPerPage, lastPage, setPerPage } = usePagination ( {
337
334
filteredDataLength : filteredData . length ,
@@ -346,12 +343,12 @@ export function StandardPage<T>({
346
343
) ;
347
344
348
345
const errorFetchingData = loaded && error ;
349
- const noResults = loaded && ! error && flatData . length == 0 ;
350
- const noMatchingResults = loaded && ! error && filteredData . length === 0 && flatData . length > 0 ;
346
+ const noResults = loaded && ! error && sortedData . length == 0 ;
347
+ const noMatchingResults = loaded && ! error && filteredData . length === 0 && sortedData . length > 0 ;
351
348
352
349
const primaryFilters = fields
353
350
. filter ( ( field ) => field . filter ?. primary )
354
- . map ( toFieldFilter ( flatData ) ) ;
351
+ . map ( toFieldFilter ( sortedData ) ) ;
355
352
356
353
return (
357
354
< span className = { className } >
0 commit comments