@@ -9,20 +9,28 @@ import {
99 Output ,
1010 QueryList
1111} from '@angular/core' ;
12+ import { queryListAndChanges$ } from '@hypertrace/common' ;
13+ import { Observable } from 'rxjs' ;
14+ import { map } from 'rxjs/operators' ;
1215import { DraggableItemComponent } from './draggable-item/draggable-item.component' ;
1316
1417@Component ( {
1518 selector : 'ht-draggable-list' ,
1619 changeDetection : ChangeDetectionStrategy . OnPush ,
1720 styleUrls : [ './draggable-list.component.scss' ] ,
1821 template : `
19- <div cdkDropList class="draggable-list" (cdkDropListDropped)="this.dropList($event)">
22+ <div
23+ class="draggable-list"
24+ *ngIf="this.draggableItems$ | async as draggableItems"
25+ cdkDropList
26+ (cdkDropListDropped)="this.dropList($event, draggableItems)"
27+ >
2028 <div
21- *ngFor="let draggableItem of this.draggableItems"
22- cdkDrag
29+ *ngFor="let draggableItem of draggableItems"
2330 class="draggable-item"
24- [ngClass]="{ disabled: disabled || draggableItem.disabled }"
25- [cdkDragDisabled]="disabled || draggableItem.disabled"
31+ [ngClass]="{ disabled: this.disabled || draggableItem.disabled }"
32+ [cdkDragDisabled]="this.disabled || draggableItem.disabled"
33+ cdkDrag
2634 >
2735 <ng-container *ngTemplateOutlet="draggableItem.content"></ng-container>
2836 </div>
@@ -39,14 +47,19 @@ export class DraggableListComponent<T> implements AfterContentInit {
3947 @ContentChildren ( DraggableItemComponent )
4048 public draggableItemsRef ! : QueryList < DraggableItemComponent < T > > ;
4149
42- public draggableItems : DraggableItemComponent < T > [ ] = [ ] ;
50+ public draggableItems$ ! : Observable < DraggableItemComponent < T > [ ] > ;
4351
4452 public ngAfterContentInit ( ) : void {
45- this . draggableItems = this . draggableItemsRef . toArray ( ) ;
53+ this . draggableItems$ = queryListAndChanges$ ( this . draggableItemsRef ) . pipe (
54+ map ( draggableItems => draggableItems . toArray ( ) )
55+ ) ;
4656 }
4757
48- public dropList ( event : CdkDragDrop < DraggableItemComponent < unknown > [ ] > ) : void {
49- moveItemInArray ( this . draggableItems , event . previousIndex , event . currentIndex ) ;
50- this . draggableListChange . emit ( this . draggableItems . map ( dragabbleItem => dragabbleItem . data ! ) ) ;
58+ public dropList (
59+ event : CdkDragDrop < DraggableItemComponent < unknown > [ ] > ,
60+ draggableItems : DraggableItemComponent < T > [ ]
61+ ) : void {
62+ moveItemInArray ( draggableItems , event . previousIndex , event . currentIndex ) ;
63+ this . draggableListChange . emit ( draggableItems . map ( dragabbleItem => dragabbleItem . data ! ) ) ;
5164 }
5265}
0 commit comments