@@ -63,17 +63,17 @@ export function useCalculatedColumns<R, SR>({
6363 const {
6464 columns,
6565 colSpanColumns,
66- lastFrozenColumnIndex ,
66+ lastStartFrozenColumnIndex ,
6767 firstEndFrozenColumnIndex,
6868 headerRowsCount
6969 } = useMemo ( ( ) : {
7070 readonly columns : readonly CalculatedColumn < R , SR > [ ] ;
7171 readonly colSpanColumns : readonly CalculatedColumn < R , SR > [ ] ;
72- readonly lastFrozenColumnIndex : number ;
72+ readonly lastStartFrozenColumnIndex : number ;
7373 readonly firstEndFrozenColumnIndex : number ;
7474 readonly headerRowsCount : number ;
7575 } => {
76- let lastFrozenColumnIndex = - 1 ;
76+ let lastStartFrozenColumnIndex = - 1 ;
7777 let firstEndFrozenColumnIndex = - 1 ;
7878 let headerRowsCount = 1 ;
7979 const columns : MutableCalculatedColumn < R , SR > [ ] = [ ] ;
@@ -121,7 +121,7 @@ export function useCalculatedColumns<R, SR>({
121121 columns . push ( column ) ;
122122
123123 if ( isStartFrozen ( frozen ) ) {
124- lastFrozenColumnIndex ++ ;
124+ lastStartFrozenColumnIndex ++ ;
125125 }
126126
127127 if ( level > headerRowsCount ) {
@@ -139,6 +139,8 @@ export function useCalculatedColumns<R, SR>({
139139 // Stable sort preserves definition order within each band.
140140 const ra = a . frozen === 'end' ? 2 : a . frozen === false ? 1 : 0 ;
141141 const rb = b . frozen === 'end' ? 2 : b . frozen === false ? 1 : 0 ;
142+
143+ // TODO: sort columns to keep them grouped if they have a parent
142144 return ra - rb ;
143145 } ) ;
144146
@@ -159,7 +161,7 @@ export function useCalculatedColumns<R, SR>({
159161 return {
160162 columns,
161163 colSpanColumns,
162- lastFrozenColumnIndex ,
164+ lastStartFrozenColumnIndex ,
163165 firstEndFrozenColumnIndex,
164166 headerRowsCount
165167 } ;
@@ -178,19 +180,19 @@ export function useCalculatedColumns<R, SR>({
178180 const {
179181 templateColumns,
180182 layoutCssVars,
181- totalFrozenColumnWidth ,
183+ totalStartFrozenColumnWidth ,
182184 totalEndFrozenColumnWidth,
183185 columnMetrics
184186 } = useMemo ( ( ) : {
185187 templateColumns : readonly string [ ] ;
186188 layoutCssVars : Readonly < Record < string , string > > ;
187- totalFrozenColumnWidth : number ;
189+ totalStartFrozenColumnWidth : number ;
188190 totalEndFrozenColumnWidth : number ;
189191 columnMetrics : ReadonlyMap < CalculatedColumn < R , SR > , ColumnMetric > ;
190192 } => {
191193 const columnMetrics = new Map < CalculatedColumn < R , SR > , ColumnMetric > ( ) ;
192194 let left = 0 ;
193- let totalFrozenColumnWidth = 0 ;
195+ let totalStartFrozenColumnWidth = 0 ;
194196 let totalEndFrozenColumnWidth = 0 ;
195197 const templateColumns : string [ ] = [ ] ;
196198
@@ -209,24 +211,25 @@ export function useCalculatedColumns<R, SR>({
209211 left += width ;
210212 }
211213
212- if ( lastFrozenColumnIndex !== - 1 ) {
213- const columnMetric = columnMetrics . get ( columns [ lastFrozenColumnIndex ] ) ! ;
214- totalFrozenColumnWidth = columnMetric . left + columnMetric . width ;
214+ if ( lastStartFrozenColumnIndex !== - 1 ) {
215+ const lastStartFrozenColumnMetric = columnMetrics . get ( columns [ lastStartFrozenColumnIndex ] ) ! ;
216+ totalStartFrozenColumnWidth =
217+ lastStartFrozenColumnMetric . left + lastStartFrozenColumnMetric . width ;
215218 }
216219
217220 const layoutCssVars : Record < string , string > = { } ;
218221
219- for ( let i = 0 ; i <= lastFrozenColumnIndex ; i ++ ) {
222+ for ( let i = 0 ; i <= lastStartFrozenColumnIndex ; i ++ ) {
220223 const column = columns [ i ] ;
221- layoutCssVars [ `--rdg-frozen-left -${ column . idx } ` ] = `${ columnMetrics . get ( column ) ! . left } px` ;
224+ layoutCssVars [ `--rdg-frozen-start -${ column . idx } ` ] = `${ columnMetrics . get ( column ) ! . left } px` ;
222225 }
223226
224227 if ( firstEndFrozenColumnIndex !== - 1 ) {
225228 const lastColumn = columns [ columns . length - 1 ] ;
226- const lastMetric = columnMetrics . get ( lastColumn ) ! ;
227- const gridEnd = lastMetric . left + lastMetric . width ;
228- const firstEndMetric = columnMetrics . get ( columns [ firstEndFrozenColumnIndex ] ) ! ;
229- totalEndFrozenColumnWidth = gridEnd - firstEndMetric . left ;
229+ const lastColumnMetric = columnMetrics . get ( lastColumn ) ! ;
230+ const gridEnd = lastColumnMetric . left + lastColumnMetric . width ;
231+ const firstEndFrozenColumnMetric = columnMetrics . get ( columns [ firstEndFrozenColumnIndex ] ) ! ;
232+ totalEndFrozenColumnWidth = gridEnd - firstEndFrozenColumnMetric . left ;
230233
231234 for ( let i = firstEndFrozenColumnIndex ; i < columns . length ; i ++ ) {
232235 const column = columns [ i ] ;
@@ -239,22 +242,22 @@ export function useCalculatedColumns<R, SR>({
239242 return {
240243 templateColumns,
241244 layoutCssVars,
242- totalFrozenColumnWidth ,
245+ totalStartFrozenColumnWidth ,
243246 totalEndFrozenColumnWidth,
244247 columnMetrics
245248 } ;
246- } , [ getColumnWidth , columns , lastFrozenColumnIndex , firstEndFrozenColumnIndex ] ) ;
249+ } , [ getColumnWidth , columns , lastStartFrozenColumnIndex , firstEndFrozenColumnIndex ] ) ;
247250
248251 const [ colOverscanStartIdx , colOverscanEndIdx ] = useMemo ( ( ) : [ number , number ] => {
249252 if ( ! enableVirtualization ) {
250253 return [ 0 , columns . length - 1 ] ;
251254 }
252255 // get the viewport's left side and right side positions for non-frozen columns
253- const viewportLeft = scrollLeft + totalFrozenColumnWidth ;
256+ const viewportLeft = scrollLeft + totalStartFrozenColumnWidth ;
254257 const viewportRight = scrollLeft + viewportWidth ;
255258 // get first and last non-frozen column indexes
256259 const lastColIdx = columns . length - 1 ;
257- const firstUnfrozenColumnIdx = min ( lastFrozenColumnIndex + 1 , lastColIdx ) ;
260+ const firstUnfrozenColumnIdx = min ( lastStartFrozenColumnIndex + 1 , lastColIdx ) ;
258261
259262 // skip rendering non-frozen columns if the frozen columns cover the entire viewport
260263 if ( viewportLeft >= viewportRight ) {
@@ -292,9 +295,9 @@ export function useCalculatedColumns<R, SR>({
292295 } , [
293296 columnMetrics ,
294297 columns ,
295- lastFrozenColumnIndex ,
298+ lastStartFrozenColumnIndex ,
296299 scrollLeft ,
297- totalFrozenColumnWidth ,
300+ totalStartFrozenColumnWidth ,
298301 viewportWidth ,
299302 enableVirtualization
300303 ] ) ;
@@ -307,9 +310,9 @@ export function useCalculatedColumns<R, SR>({
307310 templateColumns,
308311 layoutCssVars,
309312 headerRowsCount,
310- lastFrozenColumnIndex ,
313+ lastStartFrozenColumnIndex ,
311314 firstEndFrozenColumnIndex,
312- totalFrozenColumnWidth ,
315+ totalStartFrozenColumnWidth ,
313316 totalEndFrozenColumnWidth
314317 } ;
315318}
0 commit comments