1- import { useCallback } from 'react' ;
1+ import { useCallback , useMemo } from 'react' ;
22import { actions , makePropGetter , ensurePluginOrder , useGetLatest , useMountedLayoutEffect } from 'react-table' ;
33import { AnalyticalTableSelectionMode } from '../../../enums/AnalyticalTableSelectionMode.js' ;
44import type { ReactTableHooks , RowType , TableInstance } from '../types/index.js' ;
@@ -22,7 +22,7 @@ const emptyArray: RowType[] = [];
2222 * This is a fork of react-table's `useRowSelect` with performance optimizations:
2323 * - Early exit when `selectionMode` is 'None'
2424 * - Skips `selectedFlatRows` computation, `isAllRowsSelected` checks, and `prepareRow` overhead when selection is disabled
25- * - `isAllRowsSelected ` computation is memoized
25+ * - `selectedFlatRows ` computation is memoized
2626 * - Uses stable noop references when disabled
2727 * - Fixes select-all indeterminate state considering filtered-out rows (now only visible rows are considered)
2828 *
@@ -250,23 +250,29 @@ function useInstance(instance: TableInstance) {
250250
251251 ensurePluginOrder ( plugins , [ 'useFilters' , 'useGroupBy' , 'useSortBy' , 'useExpanded' , 'usePagination' ] , 'useRowSelect' ) ;
252252
253- // UI5WCR: early exit when selection disabled
254- let selectedFlatRows : RowType [ ] = emptyArray ;
255- let isAllRowsSelected = false ;
256- let isAllPageRowsSelected = false ;
253+ // UI5WCR: memoized computation with early exit when selection disabled.
254+ const selectedFlatRows = useMemo ( ( ) => {
255+ if ( ! isSelectionEnabled ) {
256+ return emptyArray ;
257+ }
257258
258- if ( isSelectionEnabled ) {
259- selectedFlatRows = [ ] ;
259+ const result : RowType [ ] = [ ] ;
260260 rows . forEach ( ( row ) => {
261261 const isSelected = selectSubRows ? getRowIsSelected ( row , selectedRowIds , getSubRows ) : ! ! selectedRowIds [ row . id ] ;
262262 row . isSelected = ! ! isSelected ;
263263 row . isSomeSelected = isSelected === null ;
264264
265265 if ( isSelected ) {
266- selectedFlatRows . push ( row ) ;
266+ result . push ( row ) ;
267267 }
268268 } ) ;
269+ return result ;
270+ } , [ rows , selectSubRows , selectedRowIds , getSubRows , isSelectionEnabled ] ) ;
269271
272+ let isAllRowsSelected = false ;
273+ let isAllPageRowsSelected = false ;
274+
275+ if ( isSelectionEnabled ) {
270276 // isAllRowsSelected
271277 const rowIds = Object . keys ( nonGroupedRowsById ) ;
272278 const selectedIds = Object . keys ( selectedRowIds ) ;
0 commit comments