@@ -1386,6 +1386,9 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
1386
1386
} else if ( key . code == 'ArrowDown' ) {
1387
1387
//increase index offset capped at bottom of tree
1388
1388
newKeyIndexOffset = this . keyDragOffsetIndex + 1 <= ( this . dropZonesList . length - 2 - index ) * 2 + 2 ? this . keyDragOffsetIndex + 1 : this . keyDragOffsetIndex ;
1389
+ } else {
1390
+ console . error ( 'wrong key' ) ;
1391
+ return ;
1389
1392
}
1390
1393
1391
1394
//if up/down limits not reached
@@ -1406,13 +1409,13 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
1406
1409
this . targetExpressionItem = this . expressionsList [ index + indexOffset - groupsTillCurrent ] ;
1407
1410
} else {
1408
1411
//if the current drop zone is a group root (AND/OR)
1409
- if ( ( index + indexOffset === 0 ) ) {
1412
+ if ( index + indexOffset === 0 ) {
1410
1413
//If the root group's AND/OR
1411
1414
this . targetElement = this . dropZonesList [ 0 ]
1412
1415
this . targetExpressionItem = this . rootGroup . children [ 0 ] ;
1413
1416
under = true ;
1414
1417
overrideDropUnder = false ;
1415
- } else if ( under || ( index + indexOffset === 0 ) ) {
1418
+ } else if ( under ) {
1416
1419
//If under AND/OR
1417
1420
this . targetElement = this . dropZonesList [ index + indexOffset ]
1418
1421
this . targetExpressionItem = this . expressionsList [ index + indexOffset - groupsTillCurrent ] ;
@@ -1424,6 +1427,23 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
1424
1427
this . targetExpressionItem = targetEx . parent ? targetEx . parent : targetEx ;
1425
1428
}
1426
1429
1430
+ //Calculation of proper targetExpression in case of multiple nested groups
1431
+ if ( index + indexOffset !== 0 ) {
1432
+ let parentCount = 0 ;
1433
+ let item = this . targetExpressionItem ;
1434
+ do {
1435
+ parentCount ++ ;
1436
+ item = item . parent ;
1437
+ }
1438
+ while ( item . parent ) ;
1439
+
1440
+ if ( key . code == 'ArrowDown' ) parentCount -- ;
1441
+
1442
+ for ( let index = 0 ; index < parentCount - groupsTillCurrent ; index ++ ) {
1443
+ if ( this . targetExpressionItem . parent ) this . targetExpressionItem = this . targetExpressionItem . parent ;
1444
+ }
1445
+ }
1446
+
1427
1447
//If should drop under AND/OR => drop over first chip in that AND/OR's group
1428
1448
if ( under ) {
1429
1449
this . targetElement = this . targetElement . nextElementSibling . firstElementChild as HTMLElement ;
@@ -1432,7 +1452,6 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
1432
1452
}
1433
1453
}
1434
1454
1435
-
1436
1455
const before = this . getPreviousChip ( this . dropGhostElement ) ;
1437
1456
const after = this . getNextChip ( this . dropGhostElement ) ;
1438
1457
0 commit comments