diff --git a/projects/components/src/draggable-list/draggable-list.component.scss b/projects/components/src/draggable-list/draggable-list.component.scss index 7c786c961..c1993cb32 100644 --- a/projects/components/src/draggable-list/draggable-list.component.scss +++ b/projects/components/src/draggable-list/draggable-list.component.scss @@ -1,4 +1,4 @@ -@import 'color-palette'; +@import 'mixins'; .draggable-list .draggable-item { cursor: move; @@ -9,3 +9,21 @@ cursor: not-allowed; } } + +.draggable-list.cdk-drop-list-dragging .draggable-item:not(.cdk-drag-placeholder) { + transition: transform 250ms cubic-bezier(0, 0, 0.2, 1); +} + +.cdk-drag-placeholder { + opacity: 0; +} + +.cdk-drag-animating { + transition: transform 250ms cubic-bezier(0, 0, 0.2, 1); +} + +.cdk-drag-preview { + box-sizing: border-box; + border-radius: 4px; + box-shadow: 0 5px 5px -3px rgba(0, 0, 0, 0.2), 0 8px 10px 1px rgba(0, 0, 0, 0.14), 0 3px 14px 2px rgba(0, 0, 0, 0.12); +} diff --git a/projects/components/src/draggable-list/draggable-list.component.ts b/projects/components/src/draggable-list/draggable-list.component.ts index f4b7b3d81..454b2f0be 100644 --- a/projects/components/src/draggable-list/draggable-list.component.ts +++ b/projects/components/src/draggable-list/draggable-list.component.ts @@ -9,6 +9,9 @@ import { Output, QueryList } from '@angular/core'; +import { queryListAndChanges$ } from '@hypertrace/common'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; import { DraggableItemComponent } from './draggable-item/draggable-item.component'; @Component({ @@ -16,13 +19,18 @@ import { DraggableItemComponent } from './draggable-item/draggable-item.componen changeDetection: ChangeDetectionStrategy.OnPush, styleUrls: ['./draggable-list.component.scss'], template: ` -
+
@@ -39,14 +47,19 @@ export class DraggableListComponent implements AfterContentInit { @ContentChildren(DraggableItemComponent) public draggableItemsRef!: QueryList>; - public draggableItems: DraggableItemComponent[] = []; + public draggableItems$!: Observable[]>; public ngAfterContentInit(): void { - this.draggableItems = this.draggableItemsRef.toArray(); + this.draggableItems$ = queryListAndChanges$(this.draggableItemsRef).pipe( + map(draggableItems => draggableItems.toArray()) + ); } - public dropList(event: CdkDragDrop[]>): void { - moveItemInArray(this.draggableItems, event.previousIndex, event.currentIndex); - this.draggableListChange.emit(this.draggableItems.map(dragabbleItem => dragabbleItem.data!)); + public dropList( + event: CdkDragDrop[]>, + draggableItems: DraggableItemComponent[] + ): void { + moveItemInArray(draggableItems, event.previousIndex, event.currentIndex); + this.draggableListChange.emit(draggableItems.map(dragabbleItem => dragabbleItem.data!)); } }