Skip to content

Commit dbf3d7f

Browse files
authored
refactor(query builder): provide drag service to the IgxQueryBuilderTreeComponent - 19.1.x (#15521)
* refactor(query-builder): change how drag service is provided
1 parent 9873bae commit dbf3d7f

File tree

2 files changed

+57
-54
lines changed

2 files changed

+57
-54
lines changed

projects/igniteui-angular/src/lib/query-builder/query-builder-drag.service.ts

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,22 @@
11
import { filter, fromEvent, sampleTime, Subscription, tap } from 'rxjs';
22
import { IgxQueryBuilderTreeComponent } from './query-builder-tree.component';
3-
import { ElementRef, Inject, Injectable } from '@angular/core';
3+
import { ElementRef, Injectable } from '@angular/core';
44
import { ExpressionGroupItem, ExpressionItem, QueryBuilderSelectors } from './query-builder.common';
55

66
const DEFAULT_SET_Z_INDEX_DELAY = 10;
77
const Z_INDEX_TO_SET = 10010; //overlay z-index is 10005
88

99
/** @hidden @internal */
1010
@Injectable()
11-
export class IgxQueryBuilderDragService {
12-
constructor(
13-
@Inject(IgxQueryBuilderTreeComponent)
14-
private _queryBuilderTreeComponent: IgxQueryBuilderTreeComponent,
15-
private _queryBuilderTreeComponentElRef: ElementRef,
16-
@Inject(IgxQueryBuilderTreeComponent)
17-
private _queryBuilderTreeComponentDeleteItem: (expressionItem: ExpressionItem) => void,
18-
@Inject(IgxQueryBuilderTreeComponent)
19-
private _queryBuilderFocusChipAfterDrag: (index: number) => void,
20-
) { }
21-
11+
export class IgxQueryBuilderDragService {
2212
public dropGhostChipNode: Node;
2313
private sourceExpressionItem: ExpressionItem;
2414
private sourceElement: HTMLElement;
2515
private targetExpressionItem: ExpressionItem;
2616
private targetElement: HTMLElement;
2717
private dropUnder: boolean;
18+
private _queryBuilderTreeComponent: IgxQueryBuilderTreeComponent;
19+
private _queryBuilderTreeComponentElRef: ElementRef;
2820
private _ghostChipMousemoveSubscription$: Subscription;
2921
private _keyboardSubscription$: Subscription;
3022
private _keyDragOffsetIndex: number = 0;
@@ -52,6 +44,12 @@ export class IgxQueryBuilderDragService {
5244
return this._queryBuilderTreeComponentElRef.nativeElement.querySelector(`.${QueryBuilderSelectors.FILTER_TREE}`);
5345
}
5446

47+
48+
public register(tree: IgxQueryBuilderTreeComponent, el: ElementRef) {
49+
this._queryBuilderTreeComponent = tree;
50+
this._queryBuilderTreeComponentElRef = el;
51+
}
52+
5553
/** When chip is picked up for dragging
5654
*
5755
* @param sourceDragElement The HTML element of the chip that's been dragged
@@ -173,7 +171,7 @@ export class IgxQueryBuilderDragService {
173171

174172
this.moveDraggedChipToNewLocation(this.sourceExpressionItem, this.targetExpressionItem, this.dropUnder);
175173

176-
this._queryBuilderFocusChipAfterDrag(dropLocationIndex);
174+
this._queryBuilderTreeComponent.focusChipAfterDrag(dropLocationIndex);
177175

178176
this.resetDragAndDrop(true);
179177

@@ -354,7 +352,7 @@ export class IgxQueryBuilderDragService {
354352
appendToExpressionItem.parent.children.splice(index + (dropUnder ? 1 : 0), 0, dragCopy);
355353

356354
//Delete from old place
357-
this._queryBuilderTreeComponentDeleteItem(sourceExpressionItem);
355+
this._queryBuilderTreeComponent.deleteItem(sourceExpressionItem);
358356
}
359357

360358
/** Reset Drag&Drop vars. Optionally the drag source vars too*/

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

Lines changed: 45 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -68,38 +68,41 @@ const DEFAULT_CHIP_FOCUS_DELAY = 50;
6868
templateUrl: './query-builder-tree.component.html',
6969
host: { 'class': 'igx-query-builder-tree' },
7070
imports: [
71-
DatePipe,
72-
FormsModule,
73-
IgxButtonDirective,
74-
IgxCheckboxComponent,
75-
IgxChipComponent,
76-
IgxComboComponent,
77-
IgxComboHeaderDirective,
78-
IgxDatePickerComponent,
79-
IgxDateTimeEditorDirective,
80-
IgxDialogComponent,
81-
IgxDragIgnoreDirective,
82-
IgxDropDirective,
83-
IgxDropDownComponent,
84-
IgxDropDownItemComponent,
85-
IgxDropDownItemNavigationDirective,
86-
IgxFieldFormatterPipe,
87-
IgxIconButtonDirective,
88-
IgxIconComponent,
89-
IgxInputDirective,
90-
IgxInputGroupComponent,
91-
IgxOverlayOutletDirective,
92-
IgxPickerClearComponent,
93-
IgxPickerToggleComponent,
94-
IgxPrefixDirective,
95-
IgxSelectComponent,
96-
IgxSelectItemComponent,
97-
IgxTimePickerComponent,
98-
IgxTooltipDirective,
99-
IgxTooltipTargetDirective,
100-
NgClass,
101-
NgTemplateOutlet
102-
]
71+
DatePipe,
72+
FormsModule,
73+
IgxButtonDirective,
74+
IgxCheckboxComponent,
75+
IgxChipComponent,
76+
IgxComboComponent,
77+
IgxComboHeaderDirective,
78+
IgxDatePickerComponent,
79+
IgxDateTimeEditorDirective,
80+
IgxDialogComponent,
81+
IgxDragIgnoreDirective,
82+
IgxDropDirective,
83+
IgxDropDownComponent,
84+
IgxDropDownItemComponent,
85+
IgxDropDownItemNavigationDirective,
86+
IgxFieldFormatterPipe,
87+
IgxIconButtonDirective,
88+
IgxIconComponent,
89+
IgxInputDirective,
90+
IgxInputGroupComponent,
91+
IgxOverlayOutletDirective,
92+
IgxPickerClearComponent,
93+
IgxPickerToggleComponent,
94+
IgxPrefixDirective,
95+
IgxSelectComponent,
96+
IgxSelectItemComponent,
97+
IgxTimePickerComponent,
98+
IgxTooltipDirective,
99+
IgxTooltipTargetDirective,
100+
NgClass,
101+
NgTemplateOutlet
102+
],
103+
providers: [
104+
IgxQueryBuilderDragService
105+
]
103106
})
104107
export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
105108
/**
@@ -519,11 +522,12 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
519522
}
520523

521524
constructor(public cdr: ChangeDetectorRef,
525+
public dragService: IgxQueryBuilderDragService,
522526
protected platform: PlatformUtil,
523-
protected el: ElementRef,
524527
private elRef: ElementRef,
525528
@Inject(LOCALE_ID) protected _localeId: string) {
526529
this.locale = this.locale || this._localeId;
530+
this.dragService.register(this, elRef);
527531
}
528532

529533
/**
@@ -840,7 +844,10 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
840844
}
841845
}
842846

843-
private deleteItem = (expressionItem: ExpressionItem, skipEmit: boolean = false) => {
847+
/**
848+
* @hidden @internal
849+
*/
850+
public deleteItem = (expressionItem: ExpressionItem, skipEmit: boolean = false) => {
844851
if (!expressionItem.parent) {
845852
this.rootGroup = null;
846853
this.currentGroup = null;
@@ -1023,15 +1030,13 @@ export class IgxQueryBuilderTreeComponent implements AfterViewInit, OnDestroy {
10231030
this.deleteItem(expressionItem);
10241031
}
10251032

1026-
private focusChipAfterDrag = (index: number) => {
1027-
this._lastFocusedChipIndex = index;
1028-
this.focusEditedExpressionChip();
1029-
}
1030-
10311033
/**
10321034
* @hidden @internal
10331035
*/
1034-
public dragService: IgxQueryBuilderDragService = new IgxQueryBuilderDragService(this, this.el, this.deleteItem, this.focusChipAfterDrag);
1036+
public focusChipAfterDrag = (index: number) => {
1037+
this._lastFocusedChipIndex = index;
1038+
this.focusEditedExpressionChip();
1039+
}
10351040

10361041
/**
10371042
* @hidden @internal

0 commit comments

Comments
 (0)