11import React from 'react' ;
22
3- import { TableWithControlsLayout } from '../TableWithControlsLayout/TableWithControlsLayout' ;
4-
3+ import { usePaginatedTableState } from './PaginatedTableContext' ;
54import { TableChunk } from './TableChunk' ;
65import { TableHead } from './TableHead' ;
76import { DEFAULT_TABLE_ROW_HEIGHT } from './constants' ;
@@ -12,7 +11,6 @@ import type {
1211 GetRowClassName ,
1312 HandleTableColumnsResize ,
1413 PaginatedTableData ,
15- RenderControls ,
1614 RenderEmptyDataMessage ,
1715 RenderErrorMessage ,
1816 SortParams ,
@@ -30,10 +28,9 @@ export interface PaginatedTableProps<T, F> {
3028 columns : Column < T > [ ] ;
3129 getRowClassName ?: GetRowClassName < T > ;
3230 rowHeight ?: number ;
33- parentRef : React . RefObject < HTMLElement > ;
31+ scrollContainerRef : React . RefObject < HTMLElement > ;
3432 initialSortParams ?: SortParams ;
3533 onColumnsResize ?: HandleTableColumnsResize ;
36- renderControls ?: RenderControls ;
3734 renderEmptyDataMessage ?: RenderEmptyDataMessage ;
3835 renderErrorMessage ?: RenderErrorMessage ;
3936 containerClassName ?: string ;
@@ -52,28 +49,43 @@ export const PaginatedTable = <T, F>({
5249 columns,
5350 getRowClassName,
5451 rowHeight = DEFAULT_TABLE_ROW_HEIGHT ,
55- parentRef ,
52+ scrollContainerRef ,
5653 initialSortParams,
5754 onColumnsResize,
58- renderControls,
5955 renderErrorMessage,
6056 renderEmptyDataMessage,
6157 containerClassName,
6258 onDataFetched,
6359 keepCache = true ,
6460} : PaginatedTableProps < T , F > ) => {
65- const initialTotal = initialEntitiesCount || 0 ;
66- const initialFound = initialEntitiesCount || 1 ;
61+ // Get state and setters from context
62+ const { tableState, setSortParams, setTotalEntities, setFoundEntities, setIsInitialLoad} =
63+ usePaginatedTableState ( ) ;
64+
65+ const { sortParams, foundEntities} = tableState ;
66+
67+ // Initialize state with props if available
68+ React . useEffect ( ( ) => {
69+ if ( initialSortParams ) {
70+ setSortParams ( initialSortParams ) ;
71+ }
6772
68- const [ sortParams , setSortParams ] = React . useState < SortParams | undefined > ( initialSortParams ) ;
69- const [ totalEntities , setTotalEntities ] = React . useState ( initialTotal ) ;
70- const [ foundEntities , setFoundEntities ] = React . useState ( initialFound ) ;
71- const [ isInitialLoad , setIsInitialLoad ] = React . useState ( true ) ;
73+ if ( initialEntitiesCount ) {
74+ setTotalEntities ( initialEntitiesCount ) ;
75+ setFoundEntities ( initialEntitiesCount ) ;
76+ }
77+ } , [
78+ setSortParams ,
79+ setTotalEntities ,
80+ setFoundEntities ,
81+ initialSortParams ,
82+ initialEntitiesCount ,
83+ ] ) ;
7284
7385 const tableRef = React . useRef < HTMLDivElement > ( null ) ;
7486
7587 const activeChunks = useScrollBasedChunks ( {
76- parentRef ,
88+ scrollContainerRef ,
7789 tableRef,
7890 totalItems : foundEntities ,
7991 rowHeight,
@@ -105,18 +117,18 @@ export const PaginatedTable = <T, F>({
105117 onDataFetched ?.( data ) ;
106118 }
107119 } ,
108- [ onDataFetched ] ,
120+ [ onDataFetched , setFoundEntities , setIsInitialLoad , setTotalEntities ] ,
109121 ) ;
110122
111- // reset table on filters change
123+ // Reset table on filters change
112124 React . useLayoutEffect ( ( ) => {
113- setTotalEntities ( initialTotal ) ;
114- setFoundEntities ( initialFound ) ;
125+ const defaultTotal = initialEntitiesCount || 0 ;
126+ const defaultFound = initialEntitiesCount || 1 ;
127+
128+ setTotalEntities ( defaultTotal ) ;
129+ setFoundEntities ( defaultFound ) ;
115130 setIsInitialLoad ( true ) ;
116- if ( parentRef ?. current ) {
117- parentRef . current . scrollTo ( 0 , 0 ) ;
118- }
119- } , [ rawFilters , initialFound , initialTotal , parentRef ] ) ;
131+ } , [ initialEntitiesCount , setTotalEntities , setFoundEntities , setIsInitialLoad ] ) ;
120132
121133 const renderChunks = ( ) => {
122134 return activeChunks . map ( ( isActive , index ) => (
@@ -148,24 +160,9 @@ export const PaginatedTable = <T, F>({
148160 </ table >
149161 ) ;
150162
151- const renderContent = ( ) => {
152- if ( renderControls ) {
153- return (
154- < TableWithControlsLayout >
155- < TableWithControlsLayout . Controls >
156- { renderControls ( { inited : ! isInitialLoad , totalEntities, foundEntities} ) }
157- </ TableWithControlsLayout . Controls >
158- < TableWithControlsLayout . Table > { renderTable ( ) } </ TableWithControlsLayout . Table >
159- </ TableWithControlsLayout >
160- ) ;
161- }
162-
163- return renderTable ( ) ;
164- } ;
165-
166163 return (
167164 < div ref = { tableRef } className = { b ( null , containerClassName ) } >
168- { renderContent ( ) }
165+ { renderTable ( ) }
169166 </ div >
170167 ) ;
171168} ;
0 commit comments