UNPKG

ng-devui

Version:

DevUI components based on Angular

115 lines 17.4 kB
import { Directive, ElementRef, Input, Optional, Self } from '@angular/core'; import { Subscription } from 'rxjs'; import { DescendantChildren } from '../services/drag-drop-desc-reg.service'; import { DropSortSyncDescendantRegisterService } from '../services/drag-drop-descendant-sync.service'; import { DragDropSyncService } from '../services/drag-drop-sync.service'; import { Utils } from '../shared/utils'; import { DroppableDirective } from './droppable.directive'; import * as i0 from "@angular/core"; import * as i1 from "./droppable.directive"; import * as i2 from "../services/drag-drop-sync.service"; import * as i3 from "../services/drag-drop-descendant-sync.service"; export class DropSortSyncDirective extends DescendantChildren { constructor(el, droppable, dragDropSyncService, dropSortSyncDrs) { super(dropSortSyncDrs); this.el = el; this.droppable = droppable; this.dragDropSyncService = dragDropSyncService; this.dropSortSyncDrs = dropSortSyncDrs; this.dropSyncGroup = ''; this.direction = 'v'; // 与sortContainer正交的方向 this.subscription = new Subscription(); this.subRenderEvent = (nativeStyle) => { this.syncGroupDirectives = this.dragDropSyncService.getDropSyncByGroup(this.dropSyncGroup).filter(directive => directive !== this); this.syncGroupDirectives.forEach(dir => { dir.renderPlaceholder(nativeStyle, this.droppable); }); }; this.subInsertionEvent = (cmd) => { this.syncGroupDirectives = this.dragDropSyncService.getDropSyncByGroup(this.dropSyncGroup).filter(directive => directive !== this); this.syncGroupDirectives.forEach(dir => { dir.insertPlaceholderCommand({ command: cmd.command, container: dir.sortContainer, relatedEl: dir.getChildrenElByIndex(dir.sortContainer, cmd.index) }); }); }; this.descendantItem = this; } ngOnInit() { this.sortContainer = this.el.nativeElement; if (this.droppable) { this.sortContainer = this.droppable.getSortContainer(); this.subscription.add(this.droppable.placeholderInsertionEvent.subscribe(this.subInsertionEvent)); this.subscription.add(this.droppable.placeholderRenderEvent.subscribe(this.subRenderEvent)); } super.ngOnInit(); } ngOnDestroy() { if (this.subscription) { this.subscription.unsubscribe(); } super.ngOnDestroy(); } getChildrenElByIndex(target, index) { if (index === undefined || target && target.children && target.children.length < index || index < 0) { return null; } return this.sortContainer.children.item(index); } renderPlaceholder(nativeStyle, droppable) { if (!this.placeholder) { this.placeholder = document.createElement(droppable.placeholderTag); this.placeholder.className = 'drag-placeholder'; this.placeholder.classList.add('drag-sync-placeholder'); this.placeholder.innerText = droppable.placeholderText; } const { width, height } = nativeStyle; if (this.direction === 'v') { this.placeholder.style.width = width + 'px'; this.placeholder.style.height = this.sortContainer.getBoundingClientRect().height + 'px'; } else { this.placeholder.style.height = height + 'px'; this.placeholder.style.width = this.sortContainer.getBoundingClientRect().width + 'px'; } Utils.addElStyles(this.placeholder, droppable.placeholderStyle); } insertPlaceholderCommand(cmd) { if (cmd.command === 'insertBefore' && cmd.container) { cmd.container.insertBefore(this.placeholder, cmd.relatedEl); return; } if (cmd.command === 'append' && cmd.container) { cmd.container.appendChild(this.placeholder); return; } if (cmd.command === 'remove' && cmd.container) { if (cmd.container.contains(this.placeholder)) { cmd.container.removeChild(this.placeholder); } return; } } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DropSortSyncDirective, deps: [{ token: i0.ElementRef }, { token: i1.DroppableDirective, optional: true, self: true }, { token: i2.DragDropSyncService }, { token: i3.DropSortSyncDescendantRegisterService }], target: i0.ɵɵFactoryTarget.Directive }); } static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "18.2.13", type: DropSortSyncDirective, selector: "[dDropSortSync]", inputs: { dropSyncGroup: ["dDropSortSync", "dropSyncGroup"], direction: ["dropSyncDirection", "direction"] }, exportAs: ["dDropSortSync"], usesInheritance: true, ngImport: i0 }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: DropSortSyncDirective, decorators: [{ type: Directive, args: [{ selector: '[dDropSortSync]', exportAs: 'dDropSortSync' }] }], ctorParameters: () => [{ type: i0.ElementRef }, { type: i1.DroppableDirective, decorators: [{ type: Optional }, { type: Self }] }, { type: i2.DragDropSyncService }, { type: i3.DropSortSyncDescendantRegisterService }], propDecorators: { dropSyncGroup: [{ type: Input, args: ['dDropSortSync'] }], direction: [{ type: Input, args: ['dropSyncDirection'] }] } }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHJvcC1zb3J0LXN5bmMuZGlyZWN0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vZGV2dWkvZHJhZ2Ryb3AvZGlyZWN0aXZlcy9kcm9wLXNvcnQtc3luYy5kaXJlY3RpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFxQixRQUFRLEVBQUUsSUFBSSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ2hHLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDcEMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDNUUsT0FBTyxFQUFFLHFDQUFxQyxFQUFFLE1BQU0sK0NBQStDLENBQUM7QUFDdEcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sb0NBQW9DLENBQUM7QUFDekUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDOzs7OztBQVEzRCxNQUFNLE9BQU8scUJBQXNCLFNBQVEsa0JBQXlDO0lBUWxGLFlBQ1MsRUFBYyxFQUNPLFNBQTZCLEVBQ2pELG1CQUF3QyxFQUN4QyxlQUFzRDtRQUU5RCxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7UUFMaEIsT0FBRSxHQUFGLEVBQUUsQ0FBWTtRQUNPLGNBQVMsR0FBVCxTQUFTLENBQW9CO1FBQ2pELHdCQUFtQixHQUFuQixtQkFBbUIsQ0FBcUI7UUFDeEMsb0JBQWUsR0FBZixlQUFlLENBQXVDO1FBWHhDLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ2YsY0FBUyxHQUFhLEdBQUcsQ0FBQyxDQUFDLHNCQUFzQjtRQUM3RSxpQkFBWSxHQUFpQixJQUFJLFlBQVksRUFBRSxDQUFDO1FBbUNoRCxtQkFBYyxHQUFHLENBQUMsV0FBNEMsRUFBRSxFQUFFO1lBQ2hFLElBQUks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R0FBRyxDQUFDLE9BQU8sS0FBSyxRQUFRLElBQUksR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzlDLEdBQUcsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM1QyxPQUFPO1FBQ1QsQ0FBQztRQUNELElBQUksR0FBRyxDQUFDLE9BQU8sS0FBSyxRQUFRLElBQUksR0FBRyxDQUFDLFNBQVMsRUFBRSxDQUFDO1lBQzlDLElBQUksR0FBRyxDQUFDLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQzdDLEdBQUcsQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztZQUM5QyxDQUFDO1lBQ0QsT0FBTztRQUNULENBQUM7SUFDSCxDQUFDOytHQWhHVSxxQkFBcUI7bUdBQXJCLHFCQUFxQjs7NEZBQXJCLHFCQUFxQjtrQkFMakMsU0FBUzttQkFBQztvQkFDVCxRQUFRLEVBQUUsaUJBQWlCO29CQUMzQixRQUFRLEVBQUUsZUFBZTtpQkFDMUI7OzBCQVlJLFFBQVE7OzBCQUFJLElBQUk7K0hBVEssYUFBYTtzQkFBcEMsS0FBSzt1QkFBQyxlQUFlO2dCQUNNLFNBQVM7c0JBQXBDLEtBQUs7dUJBQUMsbUJBQW1CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBFbGVtZW50UmVmLCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQsIE9wdGlvbmFsLCBTZWxmIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBTdWJzY3JpcHRpb24gfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IERlc2NlbmRhbnRDaGlsZHJlbiB9IGZyb20gJy4uL3NlcnZpY2VzL2RyYWctZHJvcC1kZXNjLXJlZy5zZXJ2aWNlJztcbmltcG9ydCB7IERyb3BTb3J0U3luY0Rlc2NlbmRhbnRSZWdpc3RlclNlcnZpY2UgfSBmcm9tICcuLi9zZXJ2aWNlcy9kcmFnLWRyb3AtZGVzY2VuZGFudC1zeW5jLnNlcnZpY2UnO1xuaW1wb3J0IHsgRHJhZ0Ryb3BTeW5jU2VydmljZSB9IGZyb20gJy4uL3NlcnZpY2VzL2RyYWctZHJvcC1zeW5jLnNlcnZpY2UnO1xuaW1wb3J0IHsgVXRpbHMgfSBmcm9tICcuLi9zaGFyZWQvdXRpbHMnO1xuaW1wb3J0IHsgRHJvcHBhYmxlRGlyZWN0aXZlIH0gZnJvbSAnLi9kcm9wcGFibGUuZGlyZWN0aXZlJztcbmltcG9ydCB7IERyYWdQbGFjZWhvbGRlckluc2VydGlvbkV2ZW50LCBEcmFnUGxhY2Vob2xkZXJJbnNlcnRpb25JbmRleEV2ZW50IH0gZnJvbSAnLi9wbGFjZWhvbGRlci1pbnNlcnRpb24tZXZlbnQudHlwZSc7XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1tkRHJvcFNvcnRTeW5jXScsXG4gIGV4cG9ydEFzOiAnZERyb3BTb3J0U3luYydcbn0pXG5cbmV4cG9ydCBjbGFzcyBEcm9wU29ydFN5bmNEaXJlY3RpdmUgZXh0ZW5kcyBEZXNjZW5kYW50Q2hpbGRyZW48RHJvcFNvcnRTeW5jRGlyZWN0aXZlPiBpbXBsZW1lbnRzIE9uSW5pdCwgT25EZXN0cm95IHtcbiAgQElucHV0KCdkRHJvcFNvcnRTeW5jJykgZHJvcFN5bmNHcm91cCA9ICcnO1xuICBASW5wdXQoJ2Ryb3BTeW5jRGlyZWN0aW9uJykgZGlyZWN0aW9uOiAndid8ICdoJyA9ICd2JzsgLy8g5LiOc29ydENvbnRhaW5lcuato+S6pOeahOaWueWQkVxuICBzdWJzY3JpcHRpb246IFN1YnNjcmlwdGlvbiA9IG5ldyBTdWJzY3JpcHRpb24oKTtcbiAgc3luY0dyb3VwRGlyZWN0aXZlczogQXJyYXk8RHJvcFNvcnRTeW5jRGlyZWN0aXZlPjtcbiAgcGxhY2Vob2xkZXI6IEhUTUxFbGVtZW50O1xuICBzb3J0Q29udGFpbmVyOiBIVE1MRWxlbWVudDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgZWw6IEVsZW1lbnRSZWYsXG4gICAgQE9wdGlvbmFsKCkgQFNlbGYoKSBwcml2YXRlIGRyb3BwYWJsZTogRHJvcHBhYmxlRGlyZWN0aXZlLFxuICAgIHByaXZhdGUgZHJhZ0Ryb3BTeW5jU2VydmljZTogRHJhZ0Ryb3BTeW5jU2VydmljZSxcbiAgICBwcml2YXRlIGRyb3BTb3J0U3luY0RyczogRHJvcFNvcnRTeW5jRGVzY2VuZGFudFJlZ2lzdGVyU2VydmljZSxcbiAgKSB7XG4gICAgc3VwZXIoZHJvcFNvcnRTeW5jRHJzKTtcbiAgICB0aGlzLmRlc2NlbmRhbnRJdGVtID0gdGhpcztcbiAgfVxuXG4gIG5nT25Jbml0KCkge1xuICAgIHRoaXMuc29ydENvbnRhaW5lciA9IHRoaXMuZWwubmF0aXZlRWxlbWVudDtcbiAgICBpZiAodGhpcy5kcm9wcGFibGUpIHtcbiAgICAgIHRoaXMuc29ydENvbnRhaW5lciA9IHRoaXMuZHJvcHBhYmxlLmdldFNvcnRDb250YWluZXIoKTtcbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uLmFkZChcbiAgICAgICAgdGhpcy5kcm9wcGFibGUucGxhY2Vob2xkZXJJbnNlcnRpb25FdmVudC5zdWJzY3JpYmUodGhpcy5zdWJJbnNlcnRpb25FdmVudClcbiAgICAgICk7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi5hZGQoXG4gICAgICAgIHRoaXMuZHJvcHBhYmxlLnBsYWNlaG9sZGVyUmVuZGVyRXZlbnQuc3Vic2NyaWJlKHRoaXMuc3ViUmVuZGVyRXZlbnQpXG4gICAgICApO1xuICAgIH1cbiAgICBzdXBlci5uZ09uSW5pdCgpO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgaWYgKHRoaXMuc3Vic2NyaXB0aW9uKSB7XG4gICAgICB0aGlzLnN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgIH1cbiAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICB9XG4gIHN1YlJlbmRlckV2ZW50ID0gKG5hdGl2ZVN0eWxlOiB7d2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXJ9KSA9PiB7XG4gICAgdGhpcy5zeW5jR3JvdXBEaXJlY3RpdmVzID0gdGhpcy5kcmFnRHJvcFN5bmNTZXJ2aWNlLmdldERyb3BTeW5jQnlHcm91cCh0aGlzLmRyb3BTeW5jR3JvdXApLmZpbHRlcihkaXJlY3RpdmUgPT4gZGlyZWN0aXZlICE9PSB0aGlzKTtcbiAgICB0aGlzLnN5bmNHcm91cERpcmVjdGl2ZXMuZm9yRWFjaChkaXIgPT4ge1xuICAgICAgZGlyLnJlbmRlclBsYWNlaG9sZGVyKG5hdGl2ZVN0eWxlLCB0aGlzLmRyb3BwYWJsZSk7XG4gICAgfSk7XG4gIH07XG5cbiAgc3ViSW5zZXJ0aW9uRXZlbnQgPSAoY21kOiBEcmFnUGxhY2Vob2xkZXJJbnNlcnRpb25JbmRleEV2ZW50KSA9PiB7XG4gICAgdGhpcy5zeW5jR3JvdXBEaXJlY3RpdmVzID0gdGhpcy5kcmFnRHJvcFN5bmNTZXJ2aWNlLmdldERyb3BTeW5jQnlHcm91cCh0aGlzLmRyb3BTeW5jR3JvdXApLmZpbHRlcihkaXJlY3RpdmUgPT4gZGlyZWN0aXZlICE9PSB0aGlzKTtcbiAgICB0aGlzLnN5bmNHcm91cERpcmVjdGl2ZXMuZm9yRWFjaChkaXIgPT4ge1xuICAgICAgZGlyLmluc2VydFBsYWNlaG9sZGVyQ29tbWFuZCh7XG4gICAgICAgIGNvbW1hbmQ6IGNtZC5jb21tYW5kLFxuICAgICAgICBjb250YWluZXI6IGRpci5zb3J0Q29udGFpbmVyLFxuICAgICAgICByZWxhdGVkRWw6IGRpci5nZXRDaGlsZHJlbkVsQnlJbmRleChkaXIuc29ydENvbnRhaW5lciwgY21kLmluZGV4KVxuICAgICAgfSk7XG4gICAgfSk7XG4gIH07XG4gIGdldENoaWxkcmVuRWxCeUluZGV4KHRhcmdldCwgaW5kZXg/KSB7XG4gICAgaWYgKGluZGV4ID09PSB1bmRlZmluZWQgfHwgdGFyZ2V0ICYmIHRhcmdldC5jaGlsZHJlbiAmJiB0YXJnZXQuY2hpbGRyZW4ubGVuZ3RoIDwgaW5kZXggfHwgaW5kZXggPCAwKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG4gICAgcmV0dXJuIHRoaXMuc29ydENvbnRhaW5lci5jaGlsZHJlbi5pdGVtKGluZGV4KTtcbiAgfVxuXG4gIHJlbmRlclBsYWNlaG9sZGVyKG5hdGl2ZVN0eWxlOiB7d2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXJ9LCBkcm9wcGFibGUpIHtcbiAgICBpZiAoIXRoaXMucGxhY2Vob2xkZXIpIHtcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGRyb3BwYWJsZS5wbGFjZWhvbGRlclRhZyk7XG4gICAgICB0aGlzLnBsYWNlaG9sZGVyLmNsYXNzTmFtZSA9ICdkcmFnLXBsYWNlaG9sZGVyJztcbiAgICAgIHRoaXMucGxhY2Vob2xkZXIuY2xhc3NMaXN0LmFkZCgnZHJhZy1zeW5jLXBsYWNlaG9sZGVyJyk7XG4gICAgICB0aGlzLnBsYWNlaG9sZGVyLmlubmVyVGV4dCA9IGRyb3BwYWJsZS5wbGFjZWhvbGRlclRleHQ7XG4gICAgfVxuICAgIGNvbnN0IHt3aWR0aCwgaGVpZ2h0fSA9IG5hdGl2ZVN0eWxlO1xuICAgIGlmICh0aGlzLmRpcmVjdGlvbiA9PT0gJ3YnKSB7XG4gICAgICB0aGlzLnBsYWNlaG9sZGVyLnN0eWxlLndpZHRoID0gd2lkdGggKyAncHgnO1xuICAgICAgdGhpcy5wbGFjZWhvbGRlci5zdHlsZS5oZWlnaHQgPSB0aGlzLnNvcnRDb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0ICsgJ3B4JztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5wbGFjZWhvbGRlci5zdHlsZS5oZWlnaHQgPSBoZWlnaHQgKyAncHgnO1xuICAgICAgdGhpcy5wbGFjZWhvbGRlci5zdHlsZS53aWR0aCA9IHRoaXMuc29ydENvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aCArICdweCc7XG4gICAgfVxuICAgIFV0aWxzLmFkZEVsU3R5bGVzKHRoaXMucGxhY2Vob2xkZXIsIGRyb3BwYWJsZS5wbGFjZWhvbGRlclN0eWxlKTtcblxuICB9XG5cbiAgaW5zZXJ0UGxhY2Vob2xkZXJDb21tYW5kKGNtZDogRHJhZ1BsYWNlaG9sZGVySW5zZXJ0aW9uRXZlbnQpIHtcbiAgICBpZiAoY21kLmNvbW1hbmQgPT09ICdpbnNlcnRCZWZvcmUnICYmIGNtZC5jb250YWluZXIpIHtcbiAgICAgIGNtZC5jb250YWluZXIuaW5zZXJ0QmVmb3JlKHRoaXMucGxhY2Vob2xkZXIsIGNtZC5yZWxhdGVkRWwpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoY21kLmNvbW1hbmQgPT09ICdhcHBlbmQnICYmIGNtZC5jb250YWluZXIpIHtcbiAgICAgIGNtZC5jb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5wbGFjZWhvbGRlcik7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIGlmIChjbWQuY29tbWFuZCA9PT0gJ3JlbW92ZScgJiYgY21kLmNvbnRhaW5lcikge1xuICAgICAgaWYgKGNtZC5jb250YWluZXIuY29udGFpbnModGhpcy5wbGFjZWhvbGRlcikpIHtcbiAgICAgICAgY21kLmNvbnRhaW5lci5yZW1vdmVDaGlsZCh0aGlzLnBsYWNlaG9sZGVyKTtcbiAgICAgIH1cbiAgICAgIHJldHVybjtcbiAgICB9XG4gIH1cblxufVxuIl19