Workflow actions for multiple entities

This commit is contained in:
Adina Țeudan 2021-12-08 00:05:18 +02:00
parent 567de98f30
commit 28a6b735f7

View File

@ -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<T extends IListable, K> {
key: K;
label: string;
color: string;
enterFn: (entity: T) => Promise<void> | void;
enterPredicate: (entity: T) => boolean;
enterFn: (entities: T[]) => Promise<void> | void;
enterPredicate: (entities: T[]) => boolean;
entities: BehaviorSubject<T[]>;
}
@ -112,9 +112,7 @@ export class WorkflowComponent<T extends IListable, K extends string> extends Au
async move(event: CdkDragDrop<T[]>): Promise<void> {
if (event.previousContainer !== event.container) {
const column = this._getColumnByKey((<unknown>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<T extends IListable, K extends string> extends Au
this._setupResizeObserver();
}
canMoveTo(column: WorkflowColumn<T, K>): (item: CdkDrag<T>) => boolean {
return (item: CdkDrag<T>) => column.enterPredicate(item.data);
canMoveTo(column: WorkflowColumn<T, K>): () => boolean {
return () => column.enterPredicate(this.draggingEntities$.value);
}
startDragging(column: WorkflowColumn<T, K>, $event: CdkDragStart): void {
@ -148,6 +146,7 @@ export class WorkflowComponent<T extends IListable, K extends string> extends Au
this.sourceColumn = column;
}
@Debounce(0)
stopDragging(): void {
this.draggingEntities$.next([]);
this.dragging = false;