UNPKG

ng2-tree

Version:

angular2 component for visualizing data that can be naturally represented as a tree

127 lines 14.7 kB
import { NodeMenuItemAction } from './menu/menu.events'; import { MouseButtons } from './utils/event.utils'; import { get } from './utils/fn.utils'; export class TreeController { component; tree; treeService; constructor(component) { this.component = component; this.tree = this.component.tree; this.treeService = this.component.treeService; } select() { if (!this.isSelected()) { this.component.onNodeSelected({ button: MouseButtons.Left }); } } unselect() { if (this.isSelected()) { this.component.onNodeUnselected({ button: MouseButtons.Left }); } } isSelected() { return this.component.isSelected; } expand() { if (this.isCollapsed()) { this.component.onSwitchFoldingType(); } } expandToParent(tree = this.tree) { if (tree) { const controller = this.treeService.getController(tree.id); if (controller) { requestAnimationFrame(() => { controller.expand(); this.expandToParent(tree.parent); }); } } } isExpanded() { return this.tree.isNodeExpanded(); } collapse() { if (this.isExpanded()) { this.component.onSwitchFoldingType(); } } isCollapsed() { return this.tree.isNodeCollapsed(); } toTreeModel() { return this.tree.toTreeModel(); } rename(newValue) { this.tree.markAsBeingRenamed(); this.component.applyNewValue({ type: 'keyup', value: newValue }); } remove() { this.component.onMenuItemSelected({ nodeMenuItemAction: NodeMenuItemAction.Remove }); } addChild(newNode) { if (this.tree.hasDeferredChildren() && !this.tree.childrenWereLoaded()) { return; } const newTree = this.tree.createNode(Array.isArray(newNode.children), newNode); this.treeService.fireNodeCreated(newTree); } addChildAsync(newNode) { if (this.tree.hasDeferredChildren() && !this.tree.childrenWereLoaded()) { return Promise.reject(new Error('This node loads its children asynchronously, hence child cannot be added this way')); } const newTree = this.tree.createNode(Array.isArray(newNode.children), newNode); this.treeService.fireNodeCreated(newTree); // This will give TreeInternalComponent to set up a controller for the node return new Promise(resolve => { setTimeout(() => { resolve(newTree); }); }); } changeNodeId(id) { if (!id) { throw Error('You should supply an id!'); } if (this.treeService.hasController(id)) { throw Error(`Controller already exists for the given id: ${id}`); } this.treeService.deleteController(this.tree.id); this.tree.id = id; this.treeService.setController(this.tree.id, this); } reloadChildren() { this.tree.reloadChildren(); } setChildren(children) { if (!this.tree.isLeaf()) { this.tree.setChildren(children); } } startRenaming() { this.tree.markAsBeingRenamed(); } check() { this.component.onNodeChecked(); } uncheck() { this.component.onNodeUnchecked(); } isChecked() { return this.tree.checked; } isIndetermined() { return get(this.component, 'checkboxElementRef.nativeElement.indeterminate'); } allowSelection() { this.tree.selectionAllowed = true; } forbidSelection() { this.tree.selectionAllowed = false; } isSelectionAllowed() { return this.tree.selectionAllowed; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZS1jb250cm9sbGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL3RyZWUtY29udHJvbGxlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUV4RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFDbkQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXZDLE1BQU0sT0FBTyxjQUFjO0lBSUw7SUFIWixJQUFJLENBQU87SUFDWCxXQUFXLENBQWM7SUFFakMsWUFBb0IsU0FBZ0M7UUFBaEMsY0FBUyxHQUFULFNBQVMsQ0FBdUI7UUFDbEQsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQztRQUNoQyxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsV0FBVyxDQUFDO0lBQ2hELENBQUM7SUFFTSxNQUFNO1FBQ1gsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUN0QixJQUFJLENBQUMsU0FBUyxDQUFDLGNBQWMsQ0FBQyxFQUFFLE1BQU0sRUFBRSxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUM5RDtJQUNILENBQUM7SUFFTSxRQUFRO1FBQ2IsSUFBSSxJQUFJLENBQUMsVUFBVSxFQUFFLEVBQUU7WUFDckIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxFQUFFLE1BQU0sRUFBRSxZQUFZLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztTQUNoRTtJQUNILENBQUM7SUFFTSxVQUFVO1FBQ2YsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQztJQUNuQyxDQUFDO0lBRU0sTUFBTTtRQUNYLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFO1lBQ3RCLElBQUksQ0FBQyxTQUFTLENB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QkFBZ0IsR0FBRyxJQUFJLENBQUM7SUFDcEMsQ0FBQztJQUVNLGVBQWU7UUFDcEIsSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxLQUFLLENBQUM7SUFDckMsQ0FBQztJQUVNLGtCQUFrQjtRQUN2QixPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsZ0JBQWdCLENBQUM7SUFDcEMsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgVHJlZVNlcnZpY2UgfSBmcm9tICcuL3RyZWUuc2VydmljZSc7XG5pbXBvcnQgeyBUcmVlIH0gZnJvbSAnLi90cmVlJztcbmltcG9ydCB7IFRyZWVNb2RlbCB9IGZyb20gJy4vdHJlZS50eXBlcyc7XG5pbXBvcnQgeyBOb2RlTWVudUl0ZW1BY3Rpb24gfSBmcm9tICcuL21lbnUvbWVudS5ldmVudHMnO1xuaW1wb3J0IHsgVHJlZUludGVybmFsQ29tcG9uZW50IH0gZnJvbSAnLi90cmVlLWludGVybmFsLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBNb3VzZUJ1dHRvbnMgfSBmcm9tICcuL3V0aWxzL2V2ZW50LnV0aWxzJztcbmltcG9ydCB7IGdldCB9IGZyb20gJy4vdXRpbHMvZm4udXRpbHMnO1xuXG5leHBvcnQgY2xhc3MgVHJlZUNvbnRyb2xsZXIge1xuICBwcml2YXRlIHRyZWU6IFRyZWU7XG4gIHByaXZhdGUgdHJlZVNlcnZpY2U6IFRyZWVTZXJ2aWNlO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgY29tcG9uZW50OiBUcmVlSW50ZXJuYWxDb21wb25lbnQpIHtcbiAgICB0aGlzLnRyZWUgPSB0aGlzLmNvbXBvbmVudC50cmVlO1xuICAgIHRoaXMudHJlZVNlcnZpY2UgPSB0aGlzLmNvbXBvbmVudC50cmVlU2VydmljZTtcbiAgfVxuXG4gIHB1YmxpYyBzZWxlY3QoKTogdm9pZCB7XG4gICAgaWYgKCF0aGlzLmlzU2VsZWN0ZWQoKSkge1xuICAgICAgdGhpcy5jb21wb25lbnQub25Ob2RlU2VsZWN0ZWQoeyBidXR0b246IE1vdXNlQnV0dG9ucy5MZWZ0IH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyB1bnNlbGVjdCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc1NlbGVjdGVkKCkpIHtcbiAgICAgIHRoaXMuY29tcG9uZW50Lm9uTm9kZVVuc2VsZWN0ZWQoeyBidXR0b246IE1vdXNlQnV0dG9ucy5MZWZ0IH0pO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBpc1NlbGVjdGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNvbXBvbmVudC5pc1NlbGVjdGVkO1xuICB9XG5cbiAgcHVibGljIGV4cGFuZCgpOiB2b2lkIHtcbiAgICBpZiAodGhpcy5pc0NvbGxhcHNlZCgpKSB7XG4gICAgICB0aGlzLmNvbXBvbmVudC5vblN3aXRjaEZvbGRpbmdUeXBlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGV4cGFuZFRvUGFyZW50KHRyZWU6IGFueSA9IHRoaXMudHJlZSk6IHZvaWQge1xuICAgIGlmICh0cmVlKSB7XG4gICAgICBjb25zdCBjb250cm9sbGVyID0gdGhpcy50cmVlU2VydmljZS5nZXRDb250cm9sbGVyKHRyZWUuaWQpO1xuICAgICAgaWYgKGNvbnRyb2xsZXIpIHtcbiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAgICAgICBjb250cm9sbGVyLmV4cGFuZCgpO1xuICAgICAgICAgIHRoaXMuZXhwYW5kVG9QYXJlbnQodHJlZS5wYXJlbnQpO1xuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBwdWJsaWMgaXNFeHBhbmRlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy50cmVlLmlzTm9kZUV4cGFuZGVkKCk7XG4gIH1cblxuICBwdWJsaWMgY29sbGFwc2UoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNFeHBhbmRlZCgpKSB7XG4gICAgICB0aGlzLmNvbXBvbmVudC5vblN3aXRjaEZvbGRpbmdUeXBlKCk7XG4gICAgfVxuICB9XG5cbiAgcHVibGljIGlzQ29sbGFwc2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRyZWUuaXNOb2RlQ29sbGFwc2VkKCk7XG4gIH1cblxuICBwdWJsaWMgdG9UcmVlTW9kZWwoKTogVHJlZU1vZGVsIHtcbiAgICByZXR1cm4gdGhpcy50cmVlLnRvVHJlZU1vZGVsKCk7XG4gIH1cblxuICBwdWJsaWMgcmVuYW1lKG5ld1ZhbHVlOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLnRyZWUubWFya0FzQmVpbmdSZW5hbWVkKCk7XG4gICAgdGhpcy5jb21wb25lbnQuYXBwbHlOZXdWYWx1ZSh7IHR5cGU6ICdrZXl1cCcsIHZhbHVlOiBuZXdWYWx1ZSB9KTtcbiAgfVxuXG4gIHB1YmxpYyByZW1vdmUoKTogdm9pZCB7XG4gICAgdGhpcy5jb21wb25lbnQub25NZW51SXRlbVNlbGVjdGVkKHsgbm9kZU1lbnVJdGVtQWN0aW9uOiBOb2RlTWVudUl0ZW1BY3Rpb24uUmVtb3ZlIH0pO1xuICB9XG5cbiAgcHVibGljIGFkZENoaWxkKG5ld05vZGU6IFRyZWVNb2RlbCk6IHZvaWQge1xuICAgIGlmICh0aGlzLnRyZWUuaGFzRGVmZXJyZWRDaGlsZHJlbigpICYmICF0aGlzLnRyZWUuY2hpbGRyZW5XZXJlTG9hZGVkKCkpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBjb25zdCBuZXdUcmVlID0gdGhpcy50cmVlLmNyZWF0ZU5vZGUoQXJyYXkuaXNBcnJheShuZXdOb2RlLmNoaWxkcmVuKSwgbmV3Tm9kZSk7XG4gICAgdGhpcy50cmVlU2VydmljZS5maXJlTm9kZUNyZWF0ZWQobmV3VHJlZSk7XG4gIH1cblxuICBwdWJsaWMgYWRkQ2hpbGRBc3luYyhuZXdOb2RlOiBUcmVlTW9kZWwpOiBQcm9taXNlPFRyZWU+IHtcbiAgICBpZiAodGhpcy50cmVlLmhhc0RlZmVycmVkQ2hpbGRyZW4oKSAmJiAhdGhpcy50cmVlLmNoaWxkcmVuV2VyZUxvYWRlZCgpKSB7XG4gICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoXG4gICAgICAgIG5ldyBFcnJvcignVGhpcyBub2RlIGxvYWRzIGl0cyBjaGlsZHJlbiBhc3luY2hyb25vdXNseSwgaGVuY2UgY2hpbGQgY2Fubm90IGJlIGFkZGVkIHRoaXMgd2F5JylcbiAgICAgICk7XG4gICAgfVxuXG4gICAgY29uc3QgbmV3VHJlZSA9IHRoaXMudHJlZS5jcmVhdGVOb2RlKEFycmF5LmlzQXJyYXkobmV3Tm9kZS5jaGlsZHJlbiksIG5ld05vZGUpO1xuICAgIHRoaXMudHJlZVNlcnZpY2UuZmlyZU5vZGVDcmVhdGVkKG5ld1RyZWUpO1xuXG4gICAgLy8gVGhpcyB3aWxsIGdpdmUgVHJlZUludGVybmFsQ29tcG9uZW50IHRvIHNldCB1cCBhIGNvbnRyb2xsZXIgZm9yIHRoZSBub2RlXG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmUgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIHJlc29sdmUobmV3VHJlZSk7XG4gICAgICB9KTtcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBjaGFuZ2VOb2RlSWQoaWQ6IHN0cmluZyB8IG51bWJlcikge1xuICAgIGlmICghaWQpIHtcbiAgICAgIHRocm93IEVycm9yKCdZb3Ugc2hvdWxkIHN1cHBseSBhbiBpZCEnKTtcbiAgICB9XG5cbiAgICBpZiAodGhpcy50cmVlU2VydmljZS5oYXNDb250cm9sbGVyKGlkKSkge1xuICAgICAgdGhyb3cgRXJyb3IoYENvbnRyb2xsZXIgYWxyZWFkeSBleGlzdHMgZm9yIHRoZSBnaXZlbiBpZDogJHtpZH1gKTtcbiAgICB9XG5cbiAgICB0aGlzLnRyZWVTZXJ2aWNlLmRlbGV0ZUNvbnRyb2xsZXIodGhpcy50cmVlLmlkKTtcbiAgICB0aGlzLnRyZWUuaWQgPSBpZDtcbiAgICB0aGlzLnRyZWVTZXJ2aWNlLnNldENvbnRyb2xsZXIodGhpcy50cmVlLmlkLCB0aGlzKTtcbiAgfVxuXG4gIHB1YmxpYyByZWxvYWRDaGlsZHJlbigpOiB2b2lkIHtcbiAgICB0aGlzLnRyZWUucmVsb2FkQ2hpbGRyZW4oKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRDaGlsZHJlbihjaGlsZHJlbjogVHJlZU1vZGVsW10pOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMudHJlZS5pc0xlYWYoKSkge1xuICAgICAgdGhpcy50cmVlLnNldENoaWxkcmVuKGNoaWxkcmVuKTtcbiAgICB9XG4gIH1cblxuICBwdWJsaWMgc3RhcnRSZW5hbWluZygpOiB2b2lkIHtcbiAgICB0aGlzLnRyZWUubWFya0FzQmVpbmdSZW5hbWVkKCk7XG4gIH1cblxuICBwdWJsaWMgY2hlY2soKTogdm9pZCB7XG4gICAgdGhpcy5jb21wb25lbnQub25Ob2RlQ2hlY2tlZCgpO1xuICB9XG5cbiAgcHVibGljIHVuY2hlY2soKTogdm9pZCB7XG4gICAgdGhpcy5jb21wb25lbnQub25Ob2RlVW5jaGVja2VkKCk7XG4gIH1cblxuICBwdWJsaWMgaXNDaGVja2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRyZWUuY2hlY2tlZDtcbiAgfVxuXG4gIHB1YmxpYyBpc0luZGV0ZXJtaW5lZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gZ2V0KHRoaXMuY29tcG9uZW50LCAnY2hlY2tib3hFbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQuaW5kZXRlcm1pbmF0ZScpO1xuICB9XG5cbiAgcHVibGljIGFsbG93U2VsZWN0aW9uKCkge1xuICAgIHRoaXMudHJlZS5zZWxlY3Rpb25BbGxvd2VkID0gdHJ1ZTtcbiAgfVxuXG4gIHB1YmxpYyBmb3JiaWRTZWxlY3Rpb24oKSB7XG4gICAgdGhpcy50cmVlLnNlbGVjdGlvbkFsbG93ZWQgPSBmYWxzZTtcbiAgfVxuXG4gIHB1YmxpYyBpc1NlbGVjdGlvbkFsbG93ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudHJlZS5zZWxlY3Rpb25BbGxvd2VkO1xuICB9XG59XG4iXX0=