@@ -1423,18 +1423,19 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
1423
1423
const targetEx = this . expressionsList [ index + indexOffset - groupsTillCurrent ] ;
1424
1424
this . targetExpressionItem = targetEx . parent ? targetEx . parent : targetEx ;
1425
1425
}
1426
+
1427
+ //If should drop under AND/OR => drop over first chip in that AND/OR's group
1428
+ if ( under ) {
1429
+ this . targetElement = this . targetElement . nextElementSibling . firstElementChild as HTMLElement ;
1430
+ if ( this . targetElement === this . dropGhostChipNode ) this . targetElement = this . targetElement . nextElementSibling as HTMLElement ;
1431
+ under = false ;
1432
+ }
1426
1433
}
1427
1434
1435
+
1428
1436
const before = this . getPreviousChip ( this . dropGhostElement ) ;
1429
1437
const after = this . getNextChip ( this . dropGhostElement ) ;
1430
1438
1431
- //If should drop under group root => drop over first chip in that group
1432
- if ( this . targetElement . className . indexOf ( "igx-filter-tree__expression-context-menu" ) !== - 1 && under ) {
1433
- this . targetElement = this . targetElement . nextElementSibling . firstElementChild as HTMLElement ;
1434
- if ( this . targetElement === this . dropGhostChipNode ) this . targetElement = this . targetElement . nextElementSibling as HTMLElement ;
1435
- under = false ;
1436
- }
1437
-
1438
1439
this . renderDropGhostChip ( this . targetElement , under , true , overrideDropUnder ) ;
1439
1440
1440
1441
//If it's the first arrow hit OR drop ghost is not displayed OR hasn't actually moved => move one more step in the same direction
@@ -1467,21 +1468,25 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
1467
1468
}
1468
1469
1469
1470
//Get previous chip area taking into account a possible hidden sub-tree or collapsed base chip
1470
- private getPreviousChip ( chipSubject : HTMLElement ) {
1471
- //TODO optimize
1472
- let prevElement = chipSubject ?. previousElementSibling ;
1473
- prevElement = prevElement ?. classList ?. contains ( 'igx-filter-tree__subquery' ) || ( prevElement as HTMLElement ) ?. style ?. display === 'none' ? prevElement ?. previousElementSibling : prevElement ;
1474
- prevElement = prevElement ?. classList ?. contains ( 'igx-filter-tree__subquery' ) || ( prevElement as HTMLElement ) ?. style ?. display === 'none' ? prevElement ?. previousElementSibling : prevElement ;
1471
+ private getPreviousChip ( chipSubject : Element ) {
1472
+ let prevElement = chipSubject ;
1473
+
1474
+ do {
1475
+ prevElement = prevElement ?. previousElementSibling ;
1476
+ }
1477
+ while ( prevElement && getComputedStyle ( prevElement ) . display === 'none' )
1475
1478
1476
1479
return prevElement ;
1477
1480
}
1478
1481
1479
1482
//Get next chip area taking into account a possible hidden sub-tree or collapsed base chip
1480
- private getNextChip ( chipSubject : HTMLElement ) {
1481
- //Get next and prev chip area taking into account a possible hidden sub-tree
1482
- let nextElement = chipSubject ?. nextElementSibling ;
1483
- nextElement = nextElement ?. classList ?. contains ( 'igx-filter-tree__subquery' ) || ( nextElement as HTMLElement ) ?. style ?. display === 'none' ? nextElement ?. nextElementSibling : nextElement ;
1484
- nextElement = nextElement ?. classList ?. contains ( 'igx-filter-tree__subquery' ) || ( nextElement as HTMLElement ) ?. style ?. display === 'none' ? nextElement ?. nextElementSibling : nextElement ;
1483
+ private getNextChip ( chipSubject : Element ) {
1484
+ let nextElement = chipSubject ;
1485
+
1486
+ do {
1487
+ nextElement = nextElement ?. nextElementSibling ;
1488
+ }
1489
+ while ( nextElement && getComputedStyle ( nextElement ) . display === 'none' )
1485
1490
1486
1491
return nextElement ;
1487
1492
}
0 commit comments