svogv
Version:
A decorator based approach for model driven forms, including an advanced DataGrid and a TreeView component.
79 lines • 9.69 kB
JavaScript
import { EventEmitter } from '@angular/core';
import * as tree from './treenodeoptions.model';
/**
* The base class for tree nodes.
*/
export class TreeNodeModel {
constructor(options, nodes) {
this.options = options || new tree.TreeNodeOptions();
if (nodes && nodes instanceof Array) {
this.children = nodes;
}
else {
if (nodes) {
this.children = [nodes];
}
}
this.stateChange = new EventEmitter();
this.state = tree.TreeNodeState.undefined;
}
get path() {
// walk up tree and return path with names
const p = new Array();
p.push(this);
let n = this;
while (this.parent) {
n = n.parent;
p.push(n);
}
return p;
}
hasDirectAncestor(node) {
return this.parent !== undefined;
}
get hasChildren() {
return this.children !== undefined && this.children.length > 0;
}
add(nodes) {
if (nodes && nodes instanceof Array) {
this.children.push(...nodes);
}
else {
this.children.push(nodes);
}
}
remove(node) {
const idx = this.children.indexOf(node);
if (idx > -1) {
this.children.splice(idx, 1);
return true;
}
else {
return false;
}
}
get state() {
return this._state;
}
set state(value) {
this._state = value;
if (!this.hasChildren && (this.state & tree.TreeNodeState.expanded) === tree.TreeNodeState.expanded) {
// if an expandable event occurs and there a no children, don't fire
return;
}
this.stateChange.emit(this._state);
}
get stateIsExpandend() {
return (this.state & tree.TreeNodeState.expanded) === tree.TreeNodeState.expanded;
}
get stateIsDisabled() {
return (this.state & tree.TreeNodeState.disabled) === tree.TreeNodeState.disabled;
}
get stateIsSelected() {
return (this.state & tree.TreeNodeState.selected) === tree.TreeNodeState.selected;
}
get stateIsChecked() {
return (this.state & tree.TreeNodeState.checked) === tree.TreeNodeState.checked;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJlZW5vZGUubW9kZWwuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vcHJvamVjdHMvc3ZvZ3Yvc3JjLyIsInNvdXJjZXMiOlsibGliL3dpZGdldHMvdHJlZXZpZXcvbW9kZWxzL3RyZWVub2RlLm1vZGVsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDN0MsT0FBTyxLQUFLLElBQUksTUFBTSx5QkFBeUIsQ0FBQztBQUdoRDs7R0FFRztBQUNILE1BQU0sT0FBTyxhQUFhO0lBNEJ4QixZQUFZLE9BQThCLEVBQUUsS0FBdUM7UUFDakYsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLElBQUksSUFBSSxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7UUFDckQsSUFBSSxLQUFLLElBQUksS0FBSyxZQUFZLEtBQUssRUFBRTtZQUNuQyxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQXdCLENBQUM7U0FDMUM7YUFBTTtZQUNMLElBQUksS0FBSyxFQUFFO2dCQUNULElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxLQUFzQixDQUFDLENBQUM7YUFDMUM7U0FDRjtRQUNELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxZQUFZLEVBQXNCLENBQUM7UUFDMUQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsQ0FBQztJQUM1QyxDQUFDO0lBRUQsSUFBSSxJQUFJO1FBQ04sMENBQTBDO1FBQzFDLE1BQU0sQ0FBQyxHQUFvQixJQUFJLEtBQUssRUFBaUIsQ0FBQztRQUN0RCxDQUFDLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO1FBQ2IsSUFBSSxDQUFDLEdBQWtCLElBQUksQ0FBQztRQUM1QixPQUFPLElBQUksQ0FBQyxNQUFNLEVBQUU7WUFDbEIsQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUM7WUFDYixDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO1NBQ1g7UUFDRCxPQUFPLENBQUMsQ0FBQztJQUNYLENBQUM7SUFFRCxpQkFBaUIsQ0FBQyxJQUF1QjtRQUN2QyxPQUFPLElBQUksQ0FBQyxNQUFNLEtBQUssU0FBUyxDQUFDO0lBQ25DLENBQUM7SUFFRCxJQUFJLFdBQVc7UUFDYixPQUFPLElBQUksQ0FBQyxRQUFRLEtBQUssU0FBUyxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsR0FBRyxDQUFDLEtBQXNDO1FBQ3hDLElBQUksS0FBSyxJQUFJLEtBQUssWUFBWSxLQUFLLEVBQUU7WUFDbkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsR0FBSSxLQUF5QixDQUFDLENBQUM7U0FDbkQ7YUFBTTtZQUNMLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQXNCLENBQUMsQ0FBQztTQUM1QztJQUNILENBQUM7SUFFRCxNQUFNLENBQUMsSUFBbUI7UUFDeEIsTUFBTSxHQUFHLEdBQVcsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDaEQsSUFBSSxHQUFHLEdBQUcsQ0FBQyxDQUFDLEVBQUU7WUFDWixJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDN0IsT0FBTyxJQUFJLENBQUM7U0FDYjthQUFNO1lBQ0wsT0FBTyxLQUFLLENBQUM7U0FDZDtJQUNILENBQUM7SUFFRCxJQUFJLEtBQUs7UUFDUCxPQUFPLElBQUksQ0FBQyxNQUFNLENBQUM7SUFDckIsQ0FBQztJQUNELElBQUksS0FBSyxDQUFDLEtBQXlCO1FBQ2pDLElBQUksQ0FBQyxNQUFNLEdBQUcsS0FBSyxDQUFDO1FBQ3BCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxFQUFFO1lBQ25HLG9FQUFvRTtZQUNwRSxPQUFPO1NBQ1I7UUFDRCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDckMsQ0FBQztJQUVELElBQUksZ0JBQWdCO1FBQ2xCLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDLEtBQUssSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUM7SUFDcEYsQ0FBQztJQUVELElBQUksZUFBZTtRQUNqQixPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksQ0FBQyxhQUFhLENBQUMsUUFBUSxDQUFDO0lBQ3BGLENBQUM7SUFFRCxJQUFJLGVBQWU7UUFDakIsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsS0FBSyxJQUFJLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQztJQUNwRixDQUFDO0lBRUQsSUFBSSxjQUFjO1FBQ2hCLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLEtBQUssSUFBSSxDQUFDLGFBQWEsQ0FBQyxPQUFPLENBQUM7SUFDbEYsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyB0cmVlIGZyb20gJy4vdHJlZW5vZGVvcHRpb25zLm1vZGVsJztcbmltcG9ydCB7IFRyZWVOb2RlQmFzZU1vZGVsIH0gZnJvbSAnLi90cmVlbm9kZWJhc2UubW9kZWwnO1xuXG4vKipcbiAqIFRoZSBiYXNlIGNsYXNzIGZvciB0cmVlIG5vZGVzLlxuICovXG5leHBvcnQgY2xhc3MgVHJlZU5vZGVNb2RlbCBpbXBsZW1lbnRzIFRyZWVOb2RlQmFzZU1vZGVsIHtcbiAgLyoqXG4gICAqIENvbnRyb2wgYXBwZWFyYW5jZVxuICAgKi9cbiAgb3B0aW9uczogdHJlZS5UcmVlTm9kZU9wdGlvbnM7XG4gIC8qKlxuICAgKiBzdHJ1Y3R1cmVcbiAgICovXG4gIHBhcmVudDogVHJlZU5vZGVNb2RlbDtcbiAgLyoqXG4gICAqIFN1YnNlcXVlbnQgbm9kZXMuXG4gICAqL1xuICBjaGlsZHJlbjogVHJlZU5vZGVNb2RlbFtdO1xuICAvKipcbiAgICogQW4gaWRlbnRpZmllci5cbiAgICovXG4gIG5hbWU6IHN0cmluZztcbiAgLyoqXG4gICAqIEZpZWxkIGlkXG4gICAqL1xuICBpZDogbnVtYmVyO1xuICAvKipcbiAgICogYmVoYXZpb3JcbiAgICovXG4gIHN0YXRlQ2hhbmdlOiBFdmVudEVtaXR0ZXI8dHJlZS5UcmVlTm9kZVN0YXRlPjtcblxuICBwcml2YXRlIF9zdGF0ZTogdHJlZS5UcmVlTm9kZVN0YXRlO1xuXG4gIGNvbnN0cnVjdG9yKG9wdGlvbnM/OiB0cmVlLlRyZWVOb2RlT3B0aW9ucywgbm9kZXM/OiBUcmVlTm9kZU1vZGVsIHwgVHJlZU5vZGVNb2RlbFtdKSB7XG4gICAgdGhpcy5vcHRpb25zID0gb3B0aW9ucyB8fCBuZXcgdHJlZS5UcmVlTm9kZU9wdGlvbnMoKTtcbiAgICBpZiAobm9kZXMgJiYgbm9kZXMgaW5zdGFuY2VvZiBBcnJheSkge1xuICAgICAgdGhpcy5jaGlsZHJlbiA9IG5vZGVzIGFzIFRyZWVOb2RlTW9kZWxbXTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKG5vZGVzKSB7XG4gICAgICAgIHRoaXMuY2hpbGRyZW4gPSBbbm9kZXMgYXMgVHJlZU5vZGVNb2RlbF07XG4gICAgICB9XG4gICAgfVxuICAgIHRoaXMuc3RhdGVDaGFuZ2UgPSBuZXcgRXZlbnRFbWl0dGVyPHRyZWUuVHJlZU5vZGVTdGF0ZT4oKTtcbiAgICB0aGlzLnN0YXRlID0gdHJlZS5UcmVlTm9kZVN0YXRlLnVuZGVmaW5lZDtcbiAgfVxuXG4gIGdldCBwYXRoKCk6IFRyZWVOb2RlTW9kZWxbXSB7XG4gICAgLy8gd2FsayB1cCB0cmVlIGFuZCByZXR1cm4gcGF0aCB3aXRoIG5hbWVzXG4gICAgY29uc3QgcDogVHJlZU5vZGVNb2RlbFtdID0gbmV3IEFycmF5PFRyZWVOb2RlTW9kZWw+KCk7XG4gICAgcC5wdXNoKHRoaXMpO1xuICAgIGxldCBuOiBUcmVlTm9kZU1vZGVsID0gdGhpcztcbiAgICB3aGlsZSAodGhpcy5wYXJlbnQpIHtcbiAgICAgIG4gPSBuLnBhcmVudDtcbiAgICAgIHAucHVzaChuKTtcbiAgICB9XG4gICAgcmV0dXJuIHA7XG4gIH1cblxuICBoYXNEaXJlY3RBbmNlc3Rvcihub2RlOiBUcmVlTm9kZUJhc2VNb2RlbCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnBhcmVudCAhPT0gdW5kZWZpbmVkO1xuICB9XG5cbiAgZ2V0IGhhc0NoaWxkcmVuKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmNoaWxkcmVuICE9PSB1bmRlZmluZWQgJiYgdGhpcy5jaGlsZHJlbi5sZW5ndGggPiAwO1xuICB9XG5cbiAgYWRkKG5vZGVzOiBUcmVlTm9kZU1vZGVsIHwgVHJlZU5vZGVNb2RlbFtdKTogdm9pZCB7XG4gICAgaWYgKG5vZGVzICYmIG5vZGVzIGluc3RhbmNlb2YgQXJyYXkpIHtcbiAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaCguLi4obm9kZXMgYXMgVHJlZU5vZGVNb2RlbFtdKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuY2hpbGRyZW4ucHVzaChub2RlcyBhcyBUcmVlTm9kZU1vZGVsKTtcbiAgICB9XG4gIH1cblxuICByZW1vdmUobm9kZTogVHJlZU5vZGVNb2RlbCk6IGJvb2xlYW4ge1xuICAgIGNvbnN0IGlkeDogbnVtYmVyID0gdGhpcy5jaGlsZHJlbi5pbmRleE9mKG5vZGUpO1xuICAgIGlmIChpZHggPiAtMSkge1xuICAgICAgdGhpcy5jaGlsZHJlbi5zcGxpY2UoaWR4LCAxKTtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgfVxuICB9XG5cbiAgZ2V0IHN0YXRlKCk6IHRyZWUuVHJlZU5vZGVTdGF0ZSB7XG4gICAgcmV0dXJuIHRoaXMuX3N0YXRlO1xuICB9XG4gIHNldCBzdGF0ZSh2YWx1ZTogdHJlZS5UcmVlTm9kZVN0YXRlKSB7XG4gICAgdGhpcy5fc3RhdGUgPSB2YWx1ZTtcbiAgICBpZiAoIXRoaXMuaGFzQ2hpbGRyZW4gJiYgKHRoaXMuc3RhdGUgJiB0cmVlLlRyZWVOb2RlU3RhdGUuZXhwYW5kZWQpID09PSB0cmVlLlRyZWVOb2RlU3RhdGUuZXhwYW5kZWQpIHtcbiAgICAgIC8vIGlmIGFuIGV4cGFuZGFibGUgZXZlbnQgb2NjdXJzIGFuZCB0aGVyZSBhIG5vIGNoaWxkcmVuLCBkb24ndCBmaXJlXG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIHRoaXMuc3RhdGVDaGFuZ2UuZW1pdCh0aGlzLl9zdGF0ZSk7XG4gIH1cblxuICBnZXQgc3RhdGVJc0V4cGFuZGVuZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gKHRoaXMuc3RhdGUgJiB0cmVlLlRyZWVOb2RlU3RhdGUuZXhwYW5kZWQpID09PSB0cmVlLlRyZWVOb2RlU3RhdGUuZXhwYW5kZWQ7XG4gIH1cblxuICBnZXQgc3RhdGVJc0Rpc2FibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5zdGF0ZSAmIHRyZWUuVHJlZU5vZGVTdGF0ZS5kaXNhYmxlZCkgPT09IHRyZWUuVHJlZU5vZGVTdGF0ZS5kaXNhYmxlZDtcbiAgfVxuXG4gIGdldCBzdGF0ZUlzU2VsZWN0ZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuICh0aGlzLnN0YXRlICYgdHJlZS5UcmVlTm9kZVN0YXRlLnNlbGVjdGVkKSA9PT0gdHJlZS5UcmVlTm9kZVN0YXRlLnNlbGVjdGVkO1xuICB9XG5cbiAgZ2V0IHN0YXRlSXNDaGVja2VkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiAodGhpcy5zdGF0ZSAmIHRyZWUuVHJlZU5vZGVTdGF0ZS5jaGVja2VkKSA9PT0gdHJlZS5UcmVlTm9kZVN0YXRlLmNoZWNrZWQ7XG4gIH1cbn1cbiJdfQ==