apim-developer-portal2
Version:
API management developer portal
48 lines (41 loc) • 1.44 kB
text/typescript
import * as ko from "knockout";
export class TreeViewNode {
public id: string;
public name: string;
public label: ko.Observable<string>;
public expanded?: ko.Observable<boolean>;
public nodes: ko.ObservableArray<TreeViewNode>;
public data: ko.Observable<any>;
public level?: ko.Observable<string>;
public hasChildren: ko.Computed<boolean>;
public hasActiveChild: ko.Computed<boolean>;
public onSelect: (node: TreeViewNode) => void;
public isSelected: () => boolean;
constructor(label: string) {
this.label = ko.observable(label);
this.nodes = ko.observableArray([]);
this.isSelected = ko.observable(false);
this.expanded = ko.observable(false);
this.level = ko.observable("level-1");
this.data = ko.observable();
this.hasChildren = ko.pureComputed(() => {
return this.nodes().length > 0;
});
this.hasActiveChild = ko.pureComputed(() => {
return this.hasChildren() && (this.nodes().some(x => x.hasActiveChild() || x.isSelected()));
});
}
public select(): void {
this.expanded(true);
this.onSelect(this);
}
public toggle(): void {
if (!this.expanded()) {
this.expanded(true);
this.select();
}
else {
this.expanded(false);
}
}
}