diff --git a/src/lib/listing/workflow/workflow.component.ts b/src/lib/listing/workflow/workflow.component.ts index 405fdb2..7932f7f 100644 --- a/src/lib/listing/workflow/workflow.component.ts +++ b/src/lib/listing/workflow/workflow.component.ts @@ -14,7 +14,7 @@ import { ViewChildren, } from '@angular/core'; import { ListingComponent } from '../listing-component.directive'; -import { CdkDrag, CdkDragDrop, CdkDragStart, CdkDropList } from '@angular/cdk/drag-drop'; +import { CdkDragDrop, CdkDragStart, CdkDropList } from '@angular/cdk/drag-drop'; import { AutoUnsubscribe, Debounce, Required } from '../../utils'; import { LoadingService } from '../../loading'; import { IListable } from '../models'; @@ -26,8 +26,8 @@ export interface WorkflowColumn { key: K; label: string; color: string; - enterFn: (entity: T) => Promise | void; - enterPredicate: (entity: T) => boolean; + enterFn: (entities: T[]) => Promise | void; + enterPredicate: (entities: T[]) => boolean; entities: BehaviorSubject; } @@ -112,9 +112,7 @@ export class WorkflowComponent extends Au async move(event: CdkDragDrop): Promise { if (event.previousContainer !== event.container) { const column = this._getColumnByKey((event.container.id) as K); - - // TODO: Improve this - await Promise.all(this.draggingEntities$.value.map(entity => column.enterFn(entity))); + await column.enterFn(this.draggingEntities$.value); this.listingService.setSelected([]); // TODO: Clear only when moving selected??? } } @@ -133,8 +131,8 @@ export class WorkflowComponent extends Au this._setupResizeObserver(); } - canMoveTo(column: WorkflowColumn): (item: CdkDrag) => boolean { - return (item: CdkDrag) => column.enterPredicate(item.data); + canMoveTo(column: WorkflowColumn): () => boolean { + return () => column.enterPredicate(this.draggingEntities$.value); } startDragging(column: WorkflowColumn, $event: CdkDragStart): void { @@ -148,6 +146,7 @@ export class WorkflowComponent extends Au this.sourceColumn = column; } + @Debounce(0) stopDragging(): void { this.draggingEntities$.next([]); this.dragging = false;