Skip to content

Commit c99ff17

Browse files
committed
fix(query-builder): drop next and previuos chip logic
1 parent b531469 commit c99ff17

File tree

1 file changed

+22
-17
lines changed

1 file changed

+22
-17
lines changed

projects/igniteui-angular/src/lib/query-builder/query-builder-tree.component.ts

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)