1 | import { __decorate } from 'tslib';
|
2 | import { Injectable, EventEmitter, Input, Output, Directive, NgModule } from '@angular/core';
|
3 | import { FormArray } from '@angular/forms';
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 | function isString(obj) {
|
12 | return typeof obj === "string";
|
13 | }
|
14 |
|
15 |
|
16 |
|
17 | function isPresent(obj) {
|
18 | return obj !== undefined && obj !== null;
|
19 | }
|
20 |
|
21 |
|
22 |
|
23 | function isFunction(obj) {
|
24 | return typeof obj === "function";
|
25 | }
|
26 |
|
27 |
|
28 |
|
29 | function createImage(src) {
|
30 | let img = new HTMLImageElement();
|
31 | img.src = src;
|
32 | return img;
|
33 | }
|
34 |
|
35 |
|
36 |
|
37 | function callFun(fun) {
|
38 | return fun();
|
39 | }
|
40 |
|
41 |
|
42 | class DataTransferEffect {
|
43 | constructor(name) {
|
44 | this.name = name;
|
45 | }
|
46 | }
|
47 | DataTransferEffect.COPY = new DataTransferEffect('copy');
|
48 | DataTransferEffect.LINK = new DataTransferEffect('link');
|
49 | DataTransferEffect.MOVE = new DataTransferEffect('move');
|
50 | DataTransferEffect.NONE = new DataTransferEffect('none');
|
51 | class DragImage {
|
52 | constructor(imageElement, x_offset = 0, y_offset = 0) {
|
53 | this.imageElement = imageElement;
|
54 | this.x_offset = x_offset;
|
55 | this.y_offset = y_offset;
|
56 | if (isString(this.imageElement)) {
|
57 |
|
58 | let imgScr = this.imageElement;
|
59 | this.imageElement = new HTMLImageElement();
|
60 | this.imageElement.src = imgScr;
|
61 | }
|
62 | }
|
63 | }
|
64 | class DragDropConfig {
|
65 | constructor() {
|
66 | this.onDragStartClass = "dnd-drag-start";
|
67 | this.onDragEnterClass = "dnd-drag-enter";
|
68 | this.onDragOverClass = "dnd-drag-over";
|
69 | this.onSortableDragClass = "dnd-sortable-drag";
|
70 | this.dragEffect = DataTransferEffect.MOVE;
|
71 | this.dropEffect = DataTransferEffect.MOVE;
|
72 | this.dragCursor = "move";
|
73 | this.defaultCursor = "pointer";
|
74 | }
|
75 | }
|
76 |
|
77 |
|
78 | class DragDropData {
|
79 | }
|
80 | function dragDropServiceFactory() {
|
81 | return new DragDropService();
|
82 | }
|
83 | let DragDropService = class DragDropService {
|
84 | constructor() {
|
85 | this.allowedDropZones = [];
|
86 | }
|
87 | };
|
88 | DragDropService = __decorate([
|
89 | Injectable()
|
90 | ], DragDropService);
|
91 | function dragDropSortableServiceFactory(config) {
|
92 | return new DragDropSortableService(config);
|
93 | }
|
94 | let DragDropSortableService = class DragDropSortableService {
|
95 | constructor(_config) {
|
96 | this._config = _config;
|
97 | }
|
98 | get elem() {
|
99 | return this._elem;
|
100 | }
|
101 | markSortable(elem) {
|
102 | if (isPresent(this._elem)) {
|
103 | this._elem.classList.remove(this._config.onSortableDragClass);
|
104 | }
|
105 | if (isPresent(elem)) {
|
106 | this._elem = elem;
|
107 | this._elem.classList.add(this._config.onSortableDragClass);
|
108 | }
|
109 | }
|
110 | };
|
111 | DragDropSortableService = __decorate([
|
112 | Injectable()
|
113 | ], DragDropSortableService);
|
114 |
|
115 |
|
116 | let AbstractComponent = class AbstractComponent {
|
117 | constructor(elemRef, _dragDropService, _config, _cdr) {
|
118 | this._dragDropService = _dragDropService;
|
119 | this._config = _config;
|
120 | this._cdr = _cdr;
|
121 | |
122 |
|
123 |
|
124 | this._dragEnabled = false;
|
125 | |
126 |
|
127 |
|
128 | this.dropEnabled = false;
|
129 | this.dropZones = [];
|
130 | this.cloneItem = false;
|
131 |
|
132 | this._defaultCursor = _config.defaultCursor;
|
133 | this._elem = elemRef.nativeElement;
|
134 | this._elem.style.cursor = this._defaultCursor;
|
135 |
|
136 |
|
137 |
|
138 | this._elem.ondragenter = (event) => {
|
139 | this._onDragEnter(event);
|
140 | };
|
141 | this._elem.ondragover = (event) => {
|
142 | this._onDragOver(event);
|
143 |
|
144 | if (event.dataTransfer != null) {
|
145 | event.dataTransfer.dropEffect = this._config.dropEffect.name;
|
146 | }
|
147 | return false;
|
148 | };
|
149 | this._elem.ondragleave = (event) => {
|
150 | this._onDragLeave(event);
|
151 | };
|
152 | this._elem.ondrop = (event) => {
|
153 | this._onDrop(event);
|
154 | };
|
155 |
|
156 |
|
157 |
|
158 | this._elem.onmousedown = (event) => {
|
159 | this._target = event.target;
|
160 | };
|
161 | this._elem.ondragstart = (event) => {
|
162 | if (this._dragHandle) {
|
163 | if (!this._dragHandle.contains(this._target)) {
|
164 | event.preventDefault();
|
165 | return;
|
166 | }
|
167 | }
|
168 | this._onDragStart(event);
|
169 |
|
170 | if (event.dataTransfer != null) {
|
171 | event.dataTransfer.setData('text', '');
|
172 |
|
173 | event.dataTransfer.effectAllowed = this.effectAllowed || this._config.dragEffect.name;
|
174 |
|
175 | if (isPresent(this.dragImage)) {
|
176 | if (isString(this.dragImage)) {
|
177 | event.dataTransfer.setDragImage(createImage(this.dragImage));
|
178 | }
|
179 | else if (isFunction(this.dragImage)) {
|
180 | event.dataTransfer.setDragImage(callFun(this.dragImage));
|
181 | }
|
182 | else {
|
183 | let img = this.dragImage;
|
184 | event.dataTransfer.setDragImage(img.imageElement, img.x_offset, img.y_offset);
|
185 | }
|
186 | }
|
187 | else if (isPresent(this._config.dragImage)) {
|
188 | let dragImage = this._config.dragImage;
|
189 | event.dataTransfer.setDragImage(dragImage.imageElement, dragImage.x_offset, dragImage.y_offset);
|
190 | }
|
191 | else if (this.cloneItem) {
|
192 | this._dragHelper = this._elem.cloneNode(true);
|
193 | this._dragHelper.classList.add('dnd-drag-item');
|
194 | this._dragHelper.style.position = "absolute";
|
195 | this._dragHelper.style.top = "0px";
|
196 | this._dragHelper.style.left = "-1000px";
|
197 | this._elem.parentElement.appendChild(this._dragHelper);
|
198 | event.dataTransfer.setDragImage(this._dragHelper, event.offsetX, event.offsetY);
|
199 | }
|
200 |
|
201 | let cursorelem = (this._dragHandle) ? this._dragHandle : this._elem;
|
202 | if (this._dragEnabled) {
|
203 | cursorelem.style.cursor = this.effectCursor ? this.effectCursor : this._config.dragCursor;
|
204 | }
|
205 | else {
|
206 | cursorelem.style.cursor = this._defaultCursor;
|
207 | }
|
208 | }
|
209 | };
|
210 | this._elem.ondragend = (event) => {
|
211 | if (this._elem.parentElement && this._dragHelper) {
|
212 | this._elem.parentElement.removeChild(this._dragHelper);
|
213 | }
|
214 |
|
215 | this._onDragEnd(event);
|
216 |
|
217 | let cursorelem = (this._dragHandle) ? this._dragHandle : this._elem;
|
218 | cursorelem.style.cursor = this._defaultCursor;
|
219 | };
|
220 | }
|
221 | set dragEnabled(enabled) {
|
222 | this._dragEnabled = !!enabled;
|
223 | this._elem.draggable = this._dragEnabled;
|
224 | }
|
225 | get dragEnabled() {
|
226 | return this._dragEnabled;
|
227 | }
|
228 | setDragHandle(elem) {
|
229 | this._dragHandle = elem;
|
230 | }
|
231 |
|
232 | detectChanges() {
|
233 |
|
234 | setTimeout(() => {
|
235 | if (this._cdr && !this._cdr.destroyed) {
|
236 | this._cdr.detectChanges();
|
237 | }
|
238 | }, 250);
|
239 | }
|
240 |
|
241 | _onDragEnter(event) {
|
242 |
|
243 | if (this._isDropAllowed(event)) {
|
244 |
|
245 | this._onDragEnterCallback(event);
|
246 | }
|
247 | }
|
248 | _onDragOver(event) {
|
249 |
|
250 | if (this._isDropAllowed(event)) {
|
251 |
|
252 | if (event.preventDefault) {
|
253 |
|
254 | event.preventDefault();
|
255 | }
|
256 | this._onDragOverCallback(event);
|
257 | }
|
258 | }
|
259 | _onDragLeave(event) {
|
260 |
|
261 | if (this._isDropAllowed(event)) {
|
262 |
|
263 | this._onDragLeaveCallback(event);
|
264 | }
|
265 | }
|
266 | _onDrop(event) {
|
267 |
|
268 | if (this._isDropAllowed(event)) {
|
269 |
|
270 | this._preventAndStop(event);
|
271 | this._onDropCallback(event);
|
272 | this.detectChanges();
|
273 | }
|
274 | }
|
275 | _isDropAllowed(event) {
|
276 | if ((this._dragDropService.isDragged || (event.dataTransfer && event.dataTransfer.files)) && this.dropEnabled) {
|
277 |
|
278 |
|
279 | if (this.allowDrop) {
|
280 | return this.allowDrop(this._dragDropService.dragData);
|
281 | }
|
282 |
|
283 | if (this.dropZones.length === 0 && this._dragDropService.allowedDropZones.length === 0) {
|
284 | return true;
|
285 | }
|
286 | for (let i = 0; i < this._dragDropService.allowedDropZones.length; i++) {
|
287 | let dragZone = this._dragDropService.allowedDropZones[i];
|
288 | if (this.dropZones.indexOf(dragZone) !== -1) {
|
289 | return true;
|
290 | }
|
291 | }
|
292 | }
|
293 | return false;
|
294 | }
|
295 | _preventAndStop(event) {
|
296 | if (event.preventDefault) {
|
297 | event.preventDefault();
|
298 | }
|
299 | if (event.stopPropagation) {
|
300 | event.stopPropagation();
|
301 | }
|
302 | }
|
303 |
|
304 | _onDragStart(event) {
|
305 |
|
306 | if (this._dragEnabled) {
|
307 | this._dragDropService.allowedDropZones = this.dropZones;
|
308 |
|
309 | this._onDragStartCallback(event);
|
310 | }
|
311 | }
|
312 | _onDragEnd(event) {
|
313 | this._dragDropService.allowedDropZones = [];
|
314 |
|
315 | this._onDragEndCallback(event);
|
316 | }
|
317 |
|
318 | _onDragEnterCallback(event) { }
|
319 | _onDragOverCallback(event) { }
|
320 | _onDragLeaveCallback(event) { }
|
321 | _onDropCallback(event) { }
|
322 |
|
323 | _onDragStartCallback(event) { }
|
324 | _onDragEndCallback(event) { }
|
325 | };
|
326 | AbstractComponent = __decorate([
|
327 | Injectable()
|
328 | ], AbstractComponent);
|
329 | class AbstractHandleComponent {
|
330 | constructor(elemRef, _dragDropService, _config, _Component, _cdr) {
|
331 | this._dragDropService = _dragDropService;
|
332 | this._config = _config;
|
333 | this._Component = _Component;
|
334 | this._cdr = _cdr;
|
335 | this._elem = elemRef.nativeElement;
|
336 | this._Component.setDragHandle(this._elem);
|
337 | }
|
338 | }
|
339 |
|
340 |
|
341 | let DraggableComponent = class DraggableComponent extends AbstractComponent {
|
342 | constructor(elemRef, dragDropService, config, cdr) {
|
343 | super(elemRef, dragDropService, config, cdr);
|
344 | |
345 |
|
346 |
|
347 | this.onDragStart = new EventEmitter();
|
348 | this.onDragEnd = new EventEmitter();
|
349 | |
350 |
|
351 |
|
352 |
|
353 | this.onDragSuccessCallback = new EventEmitter();
|
354 | this._defaultCursor = this._elem.style.cursor;
|
355 | this.dragEnabled = true;
|
356 | }
|
357 | set draggable(value) {
|
358 | this.dragEnabled = !!value;
|
359 | }
|
360 | set dropzones(value) {
|
361 | this.dropZones = value;
|
362 | }
|
363 | |
364 |
|
365 |
|
366 | set effectallowed(value) {
|
367 | this.effectAllowed = value;
|
368 | }
|
369 | |
370 |
|
371 |
|
372 | set effectcursor(value) {
|
373 | this.effectCursor = value;
|
374 | }
|
375 | _onDragStartCallback(event) {
|
376 | this._dragDropService.isDragged = true;
|
377 | this._dragDropService.dragData = this.dragData;
|
378 | this._dragDropService.onDragSuccessCallback = this.onDragSuccessCallback;
|
379 | this._elem.classList.add(this._config.onDragStartClass);
|
380 |
|
381 | this.onDragStart.emit({ dragData: this.dragData, mouseEvent: event });
|
382 | }
|
383 | _onDragEndCallback(event) {
|
384 | this._dragDropService.isDragged = false;
|
385 | this._dragDropService.dragData = null;
|
386 | this._dragDropService.onDragSuccessCallback = null;
|
387 | this._elem.classList.remove(this._config.onDragStartClass);
|
388 |
|
389 | this.onDragEnd.emit({ dragData: this.dragData, mouseEvent: event });
|
390 | }
|
391 | };
|
392 | __decorate([
|
393 | Input("dragEnabled")
|
394 | ], DraggableComponent.prototype, "draggable", null);
|
395 | __decorate([
|
396 | Output()
|
397 | ], DraggableComponent.prototype, "onDragStart", void 0);
|
398 | __decorate([
|
399 | Output()
|
400 | ], DraggableComponent.prototype, "onDragEnd", void 0);
|
401 | __decorate([
|
402 | Input()
|
403 | ], DraggableComponent.prototype, "dragData", void 0);
|
404 | __decorate([
|
405 | Output("onDragSuccess")
|
406 | ], DraggableComponent.prototype, "onDragSuccessCallback", void 0);
|
407 | __decorate([
|
408 | Input("dropZones")
|
409 | ], DraggableComponent.prototype, "dropzones", null);
|
410 | __decorate([
|
411 | Input("effectAllowed")
|
412 | ], DraggableComponent.prototype, "effectallowed", null);
|
413 | __decorate([
|
414 | Input("effectCursor")
|
415 | ], DraggableComponent.prototype, "effectcursor", null);
|
416 | __decorate([
|
417 | Input()
|
418 | ], DraggableComponent.prototype, "dragImage", void 0);
|
419 | __decorate([
|
420 | Input()
|
421 | ], DraggableComponent.prototype, "cloneItem", void 0);
|
422 | DraggableComponent = __decorate([
|
423 | Directive({ selector: '[dnd-draggable]' })
|
424 | ], DraggableComponent);
|
425 | let DraggableHandleComponent = class DraggableHandleComponent extends AbstractHandleComponent {
|
426 | constructor(elemRef, dragDropService, config, _Component, cdr) {
|
427 | super(elemRef, dragDropService, config, _Component, cdr);
|
428 | }
|
429 | };
|
430 | DraggableHandleComponent = __decorate([
|
431 | Directive({ selector: '[dnd-draggable-handle]' })
|
432 | ], DraggableHandleComponent);
|
433 |
|
434 |
|
435 | let DroppableComponent = class DroppableComponent extends AbstractComponent {
|
436 | constructor(elemRef, dragDropService, config, cdr) {
|
437 | super(elemRef, dragDropService, config, cdr);
|
438 | |
439 |
|
440 |
|
441 |
|
442 | this.onDropSuccess = new EventEmitter();
|
443 | this.onDragEnter = new EventEmitter();
|
444 | this.onDragOver = new EventEmitter();
|
445 | this.onDragLeave = new EventEmitter();
|
446 | this.dropEnabled = true;
|
447 | }
|
448 | set droppable(value) {
|
449 | this.dropEnabled = !!value;
|
450 | }
|
451 | set allowdrop(value) {
|
452 | this.allowDrop = value;
|
453 | }
|
454 | set dropzones(value) {
|
455 | this.dropZones = value;
|
456 | }
|
457 | |
458 |
|
459 |
|
460 | set effectallowed(value) {
|
461 | this.effectAllowed = value;
|
462 | }
|
463 | |
464 |
|
465 |
|
466 | set effectcursor(value) {
|
467 | this.effectCursor = value;
|
468 | }
|
469 | _onDragEnterCallback(event) {
|
470 | if (this._dragDropService.isDragged) {
|
471 | this._elem.classList.add(this._config.onDragEnterClass);
|
472 | this.onDragEnter.emit({ dragData: this._dragDropService.dragData, mouseEvent: event });
|
473 | }
|
474 | }
|
475 | _onDragOverCallback(event) {
|
476 | if (this._dragDropService.isDragged) {
|
477 | this._elem.classList.add(this._config.onDragOverClass);
|
478 | this.onDragOver.emit({ dragData: this._dragDropService.dragData, mouseEvent: event });
|
479 | }
|
480 | }
|
481 | ;
|
482 | _onDragLeaveCallback(event) {
|
483 | if (this._dragDropService.isDragged) {
|
484 | this._elem.classList.remove(this._config.onDragOverClass);
|
485 | this._elem.classList.remove(this._config.onDragEnterClass);
|
486 | this.onDragLeave.emit({ dragData: this._dragDropService.dragData, mouseEvent: event });
|
487 | }
|
488 | }
|
489 | ;
|
490 | _onDropCallback(event) {
|
491 | let dataTransfer = event.dataTransfer;
|
492 | if (this._dragDropService.isDragged || (dataTransfer && dataTransfer.files)) {
|
493 | this.onDropSuccess.emit({ dragData: this._dragDropService.dragData, mouseEvent: event });
|
494 | if (this._dragDropService.onDragSuccessCallback) {
|
495 | this._dragDropService.onDragSuccessCallback.emit({ dragData: this._dragDropService.dragData, mouseEvent: event });
|
496 | }
|
497 | this._elem.classList.remove(this._config.onDragOverClass);
|
498 | this._elem.classList.remove(this._config.onDragEnterClass);
|
499 | }
|
500 | }
|
501 | };
|
502 | __decorate([
|
503 | Input("dropEnabled")
|
504 | ], DroppableComponent.prototype, "droppable", null);
|
505 | __decorate([
|
506 | Output()
|
507 | ], DroppableComponent.prototype, "onDropSuccess", void 0);
|
508 | __decorate([
|
509 | Output()
|
510 | ], DroppableComponent.prototype, "onDragEnter", void 0);
|
511 | __decorate([
|
512 | Output()
|
513 | ], DroppableComponent.prototype, "onDragOver", void 0);
|
514 | __decorate([
|
515 | Output()
|
516 | ], DroppableComponent.prototype, "onDragLeave", void 0);
|
517 | __decorate([
|
518 | Input("allowDrop")
|
519 | ], DroppableComponent.prototype, "allowdrop", null);
|
520 | __decorate([
|
521 | Input("dropZones")
|
522 | ], DroppableComponent.prototype, "dropzones", null);
|
523 | __decorate([
|
524 | Input("effectAllowed")
|
525 | ], DroppableComponent.prototype, "effectallowed", null);
|
526 | __decorate([
|
527 | Input("effectCursor")
|
528 | ], DroppableComponent.prototype, "effectcursor", null);
|
529 | DroppableComponent = __decorate([
|
530 | Directive({ selector: '[dnd-droppable]' })
|
531 | ], DroppableComponent);
|
532 |
|
533 |
|
534 | let SortableContainer = class SortableContainer extends AbstractComponent {
|
535 | constructor(elemRef, dragDropService, config, cdr, _sortableDataService) {
|
536 | super(elemRef, dragDropService, config, cdr);
|
537 | this._sortableDataService = _sortableDataService;
|
538 | this._sortableData = [];
|
539 | this.dragEnabled = false;
|
540 | }
|
541 | set draggable(value) {
|
542 | this.dragEnabled = !!value;
|
543 | }
|
544 | set sortableData(sortableData) {
|
545 | this._sortableData = sortableData;
|
546 | if (sortableData instanceof FormArray) {
|
547 | this.sortableHandler = new SortableFormArrayHandler();
|
548 | }
|
549 | else {
|
550 | this.sortableHandler = new SortableArrayHandler();
|
551 | }
|
552 |
|
553 | this.dropEnabled = !!this._sortableData;
|
554 |
|
555 | }
|
556 | get sortableData() {
|
557 | return this._sortableData;
|
558 | }
|
559 | set dropzones(value) {
|
560 | this.dropZones = value;
|
561 | }
|
562 | _onDragEnterCallback(event) {
|
563 | if (this._sortableDataService.isDragged) {
|
564 | let item = this._sortableDataService.sortableContainer.getItemAt(this._sortableDataService.index);
|
565 |
|
566 | if (this.indexOf(item) === -1) {
|
567 |
|
568 |
|
569 |
|
570 | this._sortableDataService.sortableContainer.removeItemAt(this._sortableDataService.index);
|
571 | if (this._sortableDataService.sortableContainer._sortableData.length === 0) {
|
572 | this._sortableDataService.sortableContainer.dropEnabled = true;
|
573 | }
|
574 |
|
575 | this.insertItemAt(item, 0);
|
576 | this._sortableDataService.sortableContainer = this;
|
577 | this._sortableDataService.index = 0;
|
578 | }
|
579 |
|
580 | this.detectChanges();
|
581 | }
|
582 | }
|
583 | getItemAt(index) {
|
584 | return this.sortableHandler.getItemAt(this._sortableData, index);
|
585 | }
|
586 | indexOf(item) {
|
587 | return this.sortableHandler.indexOf(this._sortableData, item);
|
588 | }
|
589 | removeItemAt(index) {
|
590 | this.sortableHandler.removeItemAt(this._sortableData, index);
|
591 | }
|
592 | insertItemAt(item, index) {
|
593 | this.sortableHandler.insertItemAt(this._sortableData, item, index);
|
594 | }
|
595 | };
|
596 | __decorate([
|
597 | Input("dragEnabled")
|
598 | ], SortableContainer.prototype, "draggable", null);
|
599 | __decorate([
|
600 | Input()
|
601 | ], SortableContainer.prototype, "sortableData", null);
|
602 | __decorate([
|
603 | Input("dropZones")
|
604 | ], SortableContainer.prototype, "dropzones", null);
|
605 | SortableContainer = __decorate([
|
606 | Directive({ selector: '[dnd-sortable-container]' })
|
607 | ], SortableContainer);
|
608 | class SortableArrayHandler {
|
609 | getItemAt(sortableData, index) {
|
610 | return sortableData[index];
|
611 | }
|
612 | indexOf(sortableData, item) {
|
613 | return sortableData.indexOf(item);
|
614 | }
|
615 | removeItemAt(sortableData, index) {
|
616 | sortableData.splice(index, 1);
|
617 | }
|
618 | insertItemAt(sortableData, item, index) {
|
619 | sortableData.splice(index, 0, item);
|
620 | }
|
621 | }
|
622 | class SortableFormArrayHandler {
|
623 | getItemAt(sortableData, index) {
|
624 | return sortableData.at(index);
|
625 | }
|
626 | indexOf(sortableData, item) {
|
627 | return sortableData.controls.indexOf(item);
|
628 | }
|
629 | removeItemAt(sortableData, index) {
|
630 | sortableData.removeAt(index);
|
631 | }
|
632 | insertItemAt(sortableData, item, index) {
|
633 | sortableData.insert(index, item);
|
634 | }
|
635 | }
|
636 | let SortableComponent = class SortableComponent extends AbstractComponent {
|
637 | constructor(elemRef, dragDropService, config, _sortableContainer, _sortableDataService, cdr) {
|
638 | super(elemRef, dragDropService, config, cdr);
|
639 | this._sortableContainer = _sortableContainer;
|
640 | this._sortableDataService = _sortableDataService;
|
641 | |
642 |
|
643 |
|
644 |
|
645 | this.onDragSuccessCallback = new EventEmitter();
|
646 | this.onDragStartCallback = new EventEmitter();
|
647 | this.onDragOverCallback = new EventEmitter();
|
648 | this.onDragEndCallback = new EventEmitter();
|
649 | this.onDropSuccessCallback = new EventEmitter();
|
650 | this.dropZones = this._sortableContainer.dropZones;
|
651 | this.dragEnabled = true;
|
652 | this.dropEnabled = true;
|
653 | }
|
654 | set draggable(value) {
|
655 | this.dragEnabled = !!value;
|
656 | }
|
657 | set droppable(value) {
|
658 | this.dropEnabled = !!value;
|
659 | }
|
660 | |
661 |
|
662 |
|
663 | set effectallowed(value) {
|
664 | this.effectAllowed = value;
|
665 | }
|
666 | |
667 |
|
668 |
|
669 | set effectcursor(value) {
|
670 | this.effectCursor = value;
|
671 | }
|
672 | _onDragStartCallback(event) {
|
673 |
|
674 | this._sortableDataService.isDragged = true;
|
675 | this._sortableDataService.sortableContainer = this._sortableContainer;
|
676 | this._sortableDataService.index = this.index;
|
677 | this._sortableDataService.markSortable(this._elem);
|
678 |
|
679 | this._dragDropService.isDragged = true;
|
680 | this._dragDropService.dragData = this.dragData;
|
681 | this._dragDropService.onDragSuccessCallback = this.onDragSuccessCallback;
|
682 |
|
683 | this.onDragStartCallback.emit(this._dragDropService.dragData);
|
684 | }
|
685 | _onDragOverCallback(event) {
|
686 | if (this._sortableDataService.isDragged && this._elem !== this._sortableDataService.elem) {
|
687 |
|
688 | this._sortableDataService.sortableContainer = this._sortableContainer;
|
689 | this._sortableDataService.index = this.index;
|
690 | this._sortableDataService.markSortable(this._elem);
|
691 | this.onDragOverCallback.emit(this._dragDropService.dragData);
|
692 | }
|
693 | }
|
694 | _onDragEndCallback(event) {
|
695 |
|
696 | this._sortableDataService.isDragged = false;
|
697 | this._sortableDataService.sortableContainer = null;
|
698 | this._sortableDataService.index = null;
|
699 | this._sortableDataService.markSortable(null);
|
700 |
|
701 | this._dragDropService.isDragged = false;
|
702 | this._dragDropService.dragData = null;
|
703 | this._dragDropService.onDragSuccessCallback = null;
|
704 |
|
705 | this.onDragEndCallback.emit(this._dragDropService.dragData);
|
706 | }
|
707 | _onDragEnterCallback(event) {
|
708 | if (this._sortableDataService.isDragged) {
|
709 | this._sortableDataService.markSortable(this._elem);
|
710 | if ((this.index !== this._sortableDataService.index) ||
|
711 | (this._sortableDataService.sortableContainer.sortableData !== this._sortableContainer.sortableData)) {
|
712 |
|
713 |
|
714 | let item = this._sortableDataService.sortableContainer.getItemAt(this._sortableDataService.index);
|
715 |
|
716 | this._sortableDataService.sortableContainer.removeItemAt(this._sortableDataService.index);
|
717 | if (this._sortableDataService.sortableContainer.sortableData.length === 0) {
|
718 | this._sortableDataService.sortableContainer.dropEnabled = true;
|
719 | }
|
720 |
|
721 | this._sortableContainer.insertItemAt(item, this.index);
|
722 | if (this._sortableContainer.dropEnabled) {
|
723 | this._sortableContainer.dropEnabled = false;
|
724 | }
|
725 | this._sortableDataService.sortableContainer = this._sortableContainer;
|
726 | this._sortableDataService.index = this.index;
|
727 | this.detectChanges();
|
728 | }
|
729 | }
|
730 | }
|
731 | _onDropCallback(event) {
|
732 | if (this._sortableDataService.isDragged) {
|
733 |
|
734 | this.onDropSuccessCallback.emit(this._dragDropService.dragData);
|
735 | if (this._dragDropService.onDragSuccessCallback) {
|
736 |
|
737 | this._dragDropService.onDragSuccessCallback.emit(this._dragDropService.dragData);
|
738 | }
|
739 |
|
740 | this._sortableContainer.detectChanges();
|
741 | }
|
742 | }
|
743 | };
|
744 | __decorate([
|
745 | Input('sortableIndex')
|
746 | ], SortableComponent.prototype, "index", void 0);
|
747 | __decorate([
|
748 | Input("dragEnabled")
|
749 | ], SortableComponent.prototype, "draggable", null);
|
750 | __decorate([
|
751 | Input("dropEnabled")
|
752 | ], SortableComponent.prototype, "droppable", null);
|
753 | __decorate([
|
754 | Input()
|
755 | ], SortableComponent.prototype, "dragData", void 0);
|
756 | __decorate([
|
757 | Input("effectAllowed")
|
758 | ], SortableComponent.prototype, "effectallowed", null);
|
759 | __decorate([
|
760 | Input("effectCursor")
|
761 | ], SortableComponent.prototype, "effectcursor", null);
|
762 | __decorate([
|
763 | Output("onDragSuccess")
|
764 | ], SortableComponent.prototype, "onDragSuccessCallback", void 0);
|
765 | __decorate([
|
766 | Output("onDragStart")
|
767 | ], SortableComponent.prototype, "onDragStartCallback", void 0);
|
768 | __decorate([
|
769 | Output("onDragOver")
|
770 | ], SortableComponent.prototype, "onDragOverCallback", void 0);
|
771 | __decorate([
|
772 | Output("onDragEnd")
|
773 | ], SortableComponent.prototype, "onDragEndCallback", void 0);
|
774 | __decorate([
|
775 | Output("onDropSuccess")
|
776 | ], SortableComponent.prototype, "onDropSuccessCallback", void 0);
|
777 | SortableComponent = __decorate([
|
778 | Directive({ selector: '[dnd-sortable]' })
|
779 | ], SortableComponent);
|
780 | let SortableHandleComponent = class SortableHandleComponent extends AbstractHandleComponent {
|
781 | constructor(elemRef, dragDropService, config, _Component, cdr) {
|
782 | super(elemRef, dragDropService, config, _Component, cdr);
|
783 | }
|
784 | };
|
785 | SortableHandleComponent = __decorate([
|
786 | Directive({ selector: '[dnd-sortable-handle]' })
|
787 | ], SortableHandleComponent);
|
788 |
|
789 |
|
790 |
|
791 |
|
792 | var DndModule_1;
|
793 | const ɵ0 = dragDropServiceFactory, ɵ1 = dragDropSortableServiceFactory;
|
794 | let providers = [
|
795 | DragDropConfig,
|
796 | { provide: DragDropService, useFactory: ɵ0 },
|
797 | { provide: DragDropSortableService, useFactory: ɵ1, deps: [DragDropConfig] }
|
798 | ];
|
799 | let DndModule = DndModule_1 = class DndModule {
|
800 | static forRoot() {
|
801 | return {
|
802 | ngModule: DndModule_1,
|
803 | providers: providers
|
804 | };
|
805 | }
|
806 | };
|
807 | DndModule = DndModule_1 = __decorate([
|
808 | NgModule({
|
809 | declarations: [DraggableComponent, DraggableHandleComponent, DroppableComponent, SortableContainer, SortableComponent, SortableHandleComponent],
|
810 | exports: [DraggableComponent, DraggableHandleComponent, DroppableComponent, SortableContainer, SortableComponent, SortableHandleComponent],
|
811 | })
|
812 | ], DndModule);
|
813 |
|
814 |
|
815 |
|
816 |
|
817 |
|
818 |
|
819 |
|
820 | export { AbstractComponent, AbstractHandleComponent, DataTransferEffect, DndModule, DragDropConfig, DragDropData, DragDropService, DragDropSortableService, DragImage, DraggableComponent, DraggableHandleComponent, DroppableComponent, SortableComponent, SortableContainer, SortableHandleComponent, dragDropServiceFactory, dragDropSortableServiceFactory, providers, ɵ0, ɵ1 };
|
821 |
|