UNPKG

3.26 kBTypeScriptView Raw
1import { DrakeWithModels } from './DrakeWithModels';
2import { EventTypes } from './EventTypes';
3import { DragulaOptions } from './DragulaOptions';
4import { DrakeFactory } from './DrakeFactory';
5import { Drake } from 'dragula';
6export declare const MockDrakeFactory: DrakeFactory;
7/** You can use MockDrake to simulate Drake events.
8 *
9 * The three methods that actually do anything are `on(event, listener)`,
10 * `destroy()`, and a new method, `emit()`. Use `emit()` to manually emit Drake
11 * events, and if you injected MockDrake properly with MockDrakeFactory or
12 * mocked the DragulaService.find() method, then you can make ng2-dragula think
13 * drags and drops are happening.
14 *
15 * Caveats:
16 *
17 * 1. YOU MUST MAKE THE DOM CHANGES YOURSELF.
18 * 2. REPEAT: YOU MUST MAKE THE DOM CHANGES YOURSELF.
19 * That means `source.removeChild(el)`, and `target.insertBefore(el)`.
20 * 3. None of the other methods do anything.
21 * That's ok, because ng2-dragula doesn't use them.
22 */
23export declare class MockDrake implements DrakeWithModels {
24 containers: Element[];
25 options: DragulaOptions;
26 models?: any[][] | undefined;
27 private emitter$;
28 private subs;
29 /**
30 * @param containers A list of container elements.
31 * @param options These will NOT be used. At all.
32 * @param models Nonstandard, but useful for testing using `new MockDrake()` directly.
33 * Note, default value is undefined, like a real Drake. Don't change that.
34 */
35 constructor(containers?: Element[], options?: DragulaOptions, models?: any[][] | undefined);
36 on(event: 'drag', listener: (el: Element, source: Element) => void): Drake;
37 on(event: 'dragend', listener: (el: Element) => void): Drake;
38 on(event: 'drop', listener: (el: Element, target: Element, source: Element, sibling: Element) => void): Drake;
39 on(event: 'cancel' | 'remove' | 'shadow' | 'over' | 'out', listener: (el: Element, container: Element, source: Element) => void): Drake;
40 on(event: 'cloned', listener: (clone: Element, original: Element, type: 'copy' | 'mirror') => void): Drake;
41 on(event: 'dropModel', listener: ([el, target, source, sibling, item, sourceModel, targetModel, sourceIndex, targetIndex,]: [Element, Element, Element, Element, any, any[], any[], number, number]) => void): Drake;
42 on(event: 'removeModel', listener: ([el, container, source, item, sourceModel, sourceIndex]: [Element, Element, Element, any, any[], number]) => void): Drake;
43 dragging: boolean;
44 start(item: Element): any;
45 end(): any;
46 cancel(revert: boolean): any;
47 cancel(): any;
48 canMove(item: Element): boolean;
49 remove(): any;
50 destroy(): any;
51 /**
52 * This is the most useful method. You can use it to manually fire events that would normally
53 * be fired by a real drake.
54 *
55 * You're likely most interested in firing `drag`, `remove` and `drop`, the three events
56 * DragulaService uses to implement [dragulaModel].
57 *
58 * See https://github.com/bevacqua/dragula#drakeon-events for what you should emit (and in what order).
59 *
60 * (Note also, firing dropModel and removeModel won't work. You would have to mock DragulaService for that.)
61 */
62 emit(eventType: EventTypes, ...args: any[]): void;
63}