ng-devui
Version:
DevUI components based on Angular
115 lines • 17.4 kB
JavaScript
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