@@ -79,6 +79,10 @@ export class IgxGridNavigationService {
79
79
}
80
80
81
81
public getCellElementByVisibleIndex ( rowIndex , visibleColumnIndex ) {
82
+ if ( this . isTreeGrid && visibleColumnIndex === 0 ) {
83
+ return this . grid . nativeElement . querySelector (
84
+ `igx-tree-grid-cell[data-rowindex="${ rowIndex } "][data-visibleIndex="${ visibleColumnIndex } "]` ) ;
85
+ }
82
86
return this . grid . nativeElement . querySelector (
83
87
`igx-grid-cell[data-rowindex="${ rowIndex } "][data-visibleIndex="${ visibleColumnIndex } "]` ) ;
84
88
}
@@ -174,14 +178,18 @@ export class IgxGridNavigationService {
174
178
}
175
179
public onKeydownHome ( rowIndex ) {
176
180
const rowElement = this . grid . dataRowList . find ( ( row ) => row . index === rowIndex ) . nativeElement ;
177
- const firstCell = rowElement . querySelector ( 'igx-grid-cell' ) ;
181
+ let firstCell = this . isTreeGrid ?
182
+ rowElement . querySelector ( 'igx-tree-grid-cell' ) :
183
+ rowElement . querySelector ( 'igx-grid-cell' ) ;
178
184
if ( this . grid . pinnedColumns . length || this . displayContainerScrollLeft === 0 ) {
179
185
firstCell . focus ( ) ;
180
186
} else {
181
187
this . grid . parentVirtDir . onChunkLoad
182
188
. pipe ( first ( ) )
183
189
. subscribe ( ( ) => {
184
190
this . grid . nativeElement . focus ( { preventScroll : true } ) ;
191
+ firstCell = this . isTreeGrid ? rowElement . querySelector ( 'igx-tree-grid-cell' ) :
192
+ rowElement . querySelector ( 'igx-grid-cell' ) ;
185
193
firstCell . focus ( ) ;
186
194
} ) ;
187
195
this . horizontalScroll ( rowIndex ) . scrollTo ( 0 ) ;
@@ -208,35 +216,37 @@ export class IgxGridNavigationService {
208
216
209
217
public navigateTop ( visibleColumnIndex ) {
210
218
const verticalScroll = this . grid . verticalScrollContainer . getVerticalScroll ( ) ;
219
+ const cellSelector = this . isTreeGrid && visibleColumnIndex === 0 ? 'igx-tree-grid-cell' : 'igx-grid-cell' ;
211
220
if ( verticalScroll . scrollTop === 0 ) {
212
221
const cells = this . grid . nativeElement . querySelectorAll (
213
- `igx-grid-cell [data-visibleIndex="${ visibleColumnIndex } "]` ) ;
222
+ `${ cellSelector } [data-visibleIndex="${ visibleColumnIndex } "]` ) ;
214
223
cells [ 0 ] . focus ( ) ;
215
224
} else {
216
225
this . grid . nativeElement . focus ( { preventScroll : true } ) ;
217
226
this . grid . verticalScrollContainer . scrollTo ( 0 ) ;
218
227
this . grid . verticalScrollContainer . onChunkLoad
219
228
. pipe ( first ( ) ) . subscribe ( ( ) => {
220
229
const cells = this . grid . nativeElement . querySelectorAll (
221
- `igx-grid-cell [data-visibleIndex="${ visibleColumnIndex } "]` ) ;
222
- if ( cells . length > 0 ) { cells [ 0 ] . focus ( ) ; }
230
+ `${ cellSelector } [data-visibleIndex="${ visibleColumnIndex } "]` ) ;
231
+ if ( cells . length > 0 ) { cells [ 0 ] . focus ( ) ; }
223
232
} ) ;
224
233
}
225
234
}
226
235
227
236
public navigateBottom ( visibleColumnIndex ) {
228
237
const verticalScroll = this . grid . verticalScrollContainer . getVerticalScroll ( ) ;
238
+ const cellSelector = this . isTreeGrid && visibleColumnIndex === 0 ? 'igx-tree-grid-cell' : 'igx-grid-cell' ;
229
239
if ( verticalScroll . scrollTop === verticalScroll . scrollHeight - this . grid . verticalScrollContainer . igxForContainerSize ) {
230
240
const cells = this . grid . nativeElement . querySelectorAll (
231
- `igx-grid-cell [data-visibleIndex="${ visibleColumnIndex } "]` ) ;
241
+ `${ cellSelector } [data-visibleIndex="${ visibleColumnIndex } "]` ) ;
232
242
cells [ cells . length - 1 ] . focus ( ) ;
233
243
} else {
234
244
this . grid . nativeElement . focus ( { preventScroll : true } ) ;
235
245
this . grid . verticalScrollContainer . scrollTo ( this . grid . verticalScrollContainer . igxForOf . length - 1 ) ;
236
246
this . grid . verticalScrollContainer . onChunkLoad
237
247
. pipe ( first ( ) ) . subscribe ( ( ) => {
238
248
const cells = this . grid . nativeElement . querySelectorAll (
239
- `igx-grid-cell [data-visibleIndex="${ visibleColumnIndex } "]` ) ;
249
+ `${ cellSelector } [data-visibleIndex="${ visibleColumnIndex } "]` ) ;
240
250
if ( cells . length > 0 ) { cells [ cells . length - 1 ] . focus ( ) ; }
241
251
} ) ;
242
252
}
@@ -254,9 +264,9 @@ export class IgxGridNavigationService {
254
264
this . grid . verticalScrollContainer . onChunkLoad
255
265
. pipe ( first ( ) )
256
266
. subscribe ( ( ) => {
257
- if ( rowElement . tagName . toLowerCase ( ) === 'igx-grid-row' ) {
258
- rowElement = this . grid . nativeElement . querySelector (
259
- `igx-grid-row[data-rowindex=" ${ currentRowIndex } "]` ) ;
267
+ const tag = rowElement . tagName . toLowerCase ( ) ;
268
+ if ( tag === 'igx-grid-row' || tag === 'igx-tree- grid-row' ) {
269
+ rowElement = this . getRowByIndex ( currentRowIndex ) ;
260
270
} else {
261
271
rowElement = this . grid . nativeElement . querySelector (
262
272
`igx-grid-groupby-row[data-rowindex="${ currentRowIndex } "]` ) ;
@@ -273,7 +283,10 @@ export class IgxGridNavigationService {
273
283
currentRowEl . previousElementSibling . focus ( ) ;
274
284
} else {
275
285
if ( this . isColumnFullyVisible ( visibleColumnIndex ) && this . isColumnLeftFullyVisible ( visibleColumnIndex ) ) {
276
- currentRowEl . previousElementSibling . querySelector ( `igx-grid-cell[data-visibleIndex="${ visibleColumnIndex } "]` ) . focus ( ) ;
286
+ const cell = this . isTreeGrid && visibleColumnIndex === 0 ?
287
+ currentRowEl . previousElementSibling . querySelector ( `igx-tree-grid-cell[data-visibleIndex="${ visibleColumnIndex } "]` ) :
288
+ currentRowEl . previousElementSibling . querySelector ( `igx-grid-cell[data-visibleIndex="${ visibleColumnIndex } "]` ) ;
289
+ cell . focus ( ) ;
277
290
return ;
278
291
}
279
292
this . grid . nativeElement . focus ( { preventScroll : true } ) ;
@@ -297,11 +310,11 @@ export class IgxGridNavigationService {
297
310
this . grid . verticalScrollContainer . onChunkLoad
298
311
. pipe ( first ( ) )
299
312
. subscribe ( ( ) => {
300
- if ( rowElement . tagName . toLowerCase ( ) === 'igx-grid-row' ) {
301
- rowElement = this . grid . nativeElement . querySelector (
302
- `igx-grid-row[data-rowindex=" ${ currentRowIndex } "]` ) ;
313
+ const tag = rowElement . tagName . toLowerCase ( ) ;
314
+ if ( tag === 'igx-grid-row' || tag === 'igx-tree- grid-row' ) {
315
+ rowElement = this . getRowByIndex ( currentRowIndex ) ;
303
316
} else {
304
- rowElement = rowElement = this . grid . nativeElement . querySelector (
317
+ rowElement = this . grid . nativeElement . querySelector (
305
318
`igx-grid-groupby-row[data-rowindex="${ currentRowIndex } "]` ) ;
306
319
}
307
320
this . focusNextElement ( rowElement , visibleColumnIndex ) ;
@@ -316,7 +329,10 @@ export class IgxGridNavigationService {
316
329
rowElement . nextElementSibling . focus ( ) ;
317
330
} else {
318
331
if ( this . isColumnFullyVisible ( visibleColumnIndex ) && this . isColumnLeftFullyVisible ( visibleColumnIndex ) ) {
319
- rowElement . nextElementSibling . querySelector ( `igx-grid-cell[data-visibleIndex="${ visibleColumnIndex } "]` ) . focus ( ) ;
332
+ const cell = this . isTreeGrid && visibleColumnIndex === 0 ?
333
+ rowElement . nextElementSibling . querySelector ( `igx-tree-grid-cell[data-visibleIndex="${ visibleColumnIndex } "]` ) :
334
+ rowElement . nextElementSibling . querySelector ( `igx-grid-cell[data-visibleIndex="${ visibleColumnIndex } "]` ) ;
335
+ cell . focus ( ) ;
320
336
return ;
321
337
}
322
338
this . performHorizontalScrollToCell ( parseInt (
@@ -328,7 +344,11 @@ export class IgxGridNavigationService {
328
344
const verticalScroll = this . grid . verticalScrollContainer . getVerticalScroll ( ) ;
329
345
const horizontalScroll = this . grid . dataRowList . first . virtDirRow . getHorizontalScroll ( ) ;
330
346
if ( verticalScroll . scrollTop === 0 ) {
331
- this . onKeydownHome ( this . grid . dataRowList . first . index ) ;
347
+ if ( ! this . isTreeGrid ) {
348
+ this . onKeydownHome ( this . grid . dataRowList . first . index ) ;
349
+ } else {
350
+ this . onKeydownHome ( 0 ) ;
351
+ }
332
352
} else {
333
353
if ( ! horizontalScroll . clientWidth || parseInt ( horizontalScroll . scrollLeft , 10 ) <= 1 || this . grid . pinnedColumns . length ) {
334
354
this . navigateTop ( 0 ) ;
@@ -346,14 +366,14 @@ export class IgxGridNavigationService {
346
366
public goToLastCell ( ) {
347
367
const verticalScroll = this . grid . verticalScrollContainer . getVerticalScroll ( ) ;
348
368
if ( verticalScroll . scrollTop === verticalScroll . scrollHeight - this . grid . verticalScrollContainer . igxForContainerSize ) {
349
- const rows = this . grid . nativeElement . querySelectorAll ( 'igx-grid-row' ) ;
369
+ const rows = this . getAllRows ( ) ;
350
370
const rowIndex = parseInt ( rows [ rows . length - 1 ] . getAttribute ( 'data-rowIndex' ) , 10 ) ;
351
371
this . onKeydownEnd ( rowIndex ) ;
352
372
} else {
353
373
this . grid . verticalScrollContainer . scrollTo ( this . grid . verticalScrollContainer . igxForOf . length - 1 ) ;
354
374
this . grid . verticalScrollContainer . onChunkLoad
355
375
. pipe ( first ( ) ) . subscribe ( ( ) => {
356
- const rows = this . grid . nativeElement . querySelectorAll ( 'igx-grid-row' ) ;
376
+ const rows = this . getAllRows ( ) ;
357
377
if ( rows . length > 0 ) {
358
378
const rowIndex = parseInt ( rows [ rows . length - 1 ] . getAttribute ( 'data-rowIndex' ) , 10 ) ;
359
379
this . onKeydownEnd ( rowIndex ) ;
@@ -372,7 +392,7 @@ export class IgxGridNavigationService {
372
392
this . navigateDown ( currentRowEl , rowIndex , 0 ) ;
373
393
}
374
394
} else {
375
- const cell = currentRowEl . querySelector ( `igx-grid-cell[data-visibleIndex=" ${ visibleColumnIndex } "]` ) ;
395
+ const cell = this . getCellElementByVisibleIndex ( rowIndex , visibleColumnIndex ) ;
376
396
if ( cell ) {
377
397
if ( this . grid . rowEditable && this . isRowInEditMode ( rowIndex ) ) {
378
398
this . moveNextEditable ( cell , rowIndex , visibleColumnIndex ) ;
@@ -412,4 +432,19 @@ export class IgxGridNavigationService {
412
432
} ) ;
413
433
this . horizontalScroll ( rowIndex ) . scrollTo ( unpinnedIndex ) ;
414
434
}
435
+ private getRowByIndex ( index ) {
436
+ return this . isTreeGrid ? this . grid . nativeElement . querySelector (
437
+ `igx-tree-grid-row[data-rowindex="${ index } "]` ) :
438
+ this . grid . nativeElement . querySelector (
439
+ `igx-grid-row[data-rowindex="${ index } "]` ) ;
440
+ }
441
+
442
+ private getAllRows ( ) {
443
+ return this . isTreeGrid ? this . grid . nativeElement . querySelectorAll ( 'igx-tree-grid-row' ) :
444
+ this . grid . nativeElement . querySelectorAll ( 'igx-grid-row' ) ;
445
+ }
446
+
447
+ private get isTreeGrid ( ) {
448
+ return this . grid . nativeElement . tagName . toLowerCase ( ) === 'igx-tree-grid' ;
449
+ }
415
450
}
0 commit comments