@@ -1423,18 +1423,19 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
14231423 const targetEx = this . expressionsList [ index + indexOffset - groupsTillCurrent ] ;
14241424 this . targetExpressionItem = targetEx . parent ? targetEx . parent : targetEx ;
14251425 }
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+ }
14261433 }
14271434
1435+
14281436 const before = this . getPreviousChip ( this . dropGhostElement ) ;
14291437 const after = this . getNextChip ( this . dropGhostElement ) ;
14301438
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-
14381439 this . renderDropGhostChip ( this . targetElement , under , true , overrideDropUnder ) ;
14391440
14401441 //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 {
14671468 }
14681469
14691470 //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' )
14751478
14761479 return prevElement ;
14771480 }
14781481
14791482 //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' )
14851490
14861491 return nextElement ;
14871492 }
0 commit comments