@supermemo/ng2-dragula
Version:
Simple drag and drop with dragula
56 lines (52 loc) • 2.6 kB
text/typescript
import { EMPTY, Observable } from 'rxjs';
import { DragulaOptions } from '../DragulaOptions';
import { DragulaService } from '../components/dragula.service';
import { Group } from '../Group';
import { MockDrake } from '../MockDrake';
type Interface<T> = {
[P in keyof T]: T[P]
}
export class StaticService implements Interface<DragulaService> {
public drag: (groupName?: string) => Observable<{ name: string; el: Element; source: Element; }>
= () => EMPTY;
public dragend: (groupName?: string) => Observable<{ name: string; el: Element; }>
= () => EMPTY;
public drop: (groupName?: string) => Observable<{ name: string; el: Element; target: Element; source: Element; sibling: Element; }>
= () => EMPTY;
public cancel: (groupName?: string) => Observable<{ name: string; el: Element; container: Element; source: Element; }>
= () => EMPTY;
public remove: (groupName?: string) => Observable<{ name: string; el: Element; container: Element; source: Element; }>
= () => EMPTY;
public shadow: (groupName?: string) => Observable<{ name: string; el: Element; container: Element; source: Element; }>
= () => EMPTY;
public over: (groupName?: string) => Observable<{ name: string; el: Element; container: Element; source: Element; }>
= () => EMPTY;
public out: (groupName?: string) => Observable<{ name: string; el: Element; container: Element; source: Element; }>
= () => EMPTY;
public cloned: (groupName?: string) => Observable<{ name: string; clone: Element; original: Element; cloneType: "mirror" | "copy"; }>
= () => EMPTY;
public dropModel: <T = any>(groupName?: string) => Observable<{ name: string; el: Element; target: Element; source: Element; sibling: Element; item: T; sourceModel: T[]; targetModel: T[]; sourceIndex: number; targetIndex: number; }>
= () => EMPTY;
public removeModel: <T = any>(groupName?: string) => Observable<{ name: string; el: Element; container: Element; source: Element; item: T; sourceModel: T[]; sourceIndex: number; }>
= () => EMPTY;
groups: { [k: string]: Group } = {};
add(group: Group): Group {
this.groups[group.name] = group;
return group;
}
createGroup<T = any>(name: string, options: DragulaOptions<T>): Group {
let group = new Group(name, new MockDrake([], options), options);
return this.add(group);
}
find(name: string): Group {
return this.groups[name];
}
destroy(name: string): void {
let g = this.groups[name];
g.drake.destroy();
delete this.groups[name];
}
clear() {
Object.keys(this.groups).forEach(k => this.destroy(k));
}
}