ng2-tree
Version:
angular2 component for visualizing data that can be naturally represented as a tree
127 lines • 14.7 kB
JavaScript
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=