-
Notifications
You must be signed in to change notification settings - Fork 7
/
drag-drop-event-factory.ts
46 lines (40 loc) · 1.56 KB
/
drag-drop-event-factory.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
import { CdkDrag, CdkDragDrop, CdkDropList } from '@angular/cdk/drag-drop';
export class DragDropEventFactory<T> {
createInContainerEvent(containerId: string, data: T[], fromIndex: number, toIndex: number): CdkDragDrop<T[], T[]> {
const event = this.createEvent(fromIndex, toIndex);
const container: any = { id: containerId, data: data };
event.container = container;
event.previousContainer = event.container;
event.item = { data: data[fromIndex] } as CdkDrag<T>;
return event;
}
createCrossContainerEvent(from: ContainerModel<T>, to: ContainerModel<T>): CdkDragDrop<T[], T[]> {
const event = this.createEvent(from.index, to.index);
event.container = this.createContainer(to);
event.previousContainer = this.createContainer(from);
event.item = { data: from.data[from.index] } as CdkDrag<T>;
return event;
}
private createEvent(previousIndex: number, currentIndex: number): CdkDragDrop<T[], T[]> {
return {
previousIndex: previousIndex,
currentIndex: currentIndex,
item: undefined,
container: undefined,
previousContainer: undefined,
isPointerOverContainer: true,
distance: { x: 0, y: 0 },
dropPoint: undefined,
event: new MouseEvent(null)
};
}
private createContainer(model: ContainerModel<T>): CdkDropList<T[]> {
const container: any = { id: model.id, data: model.data };
return <CdkDropList<T[]>>container;
}
}
export interface ContainerModel<T> {
id: string,
data: T[],
index: number
}