ng-zorro-antd
Version:
An enterprise-class UI components based on Ant Design and Angular
78 lines • 11.3 kB
JavaScript
/**
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://github.com/NG-ZORRO/ng-zorro-antd/blob/master/LICENSE
*/
import { SelectionModel } from '@angular/cdk/collections';
import { BehaviorSubject, merge } from 'rxjs';
import { map } from 'rxjs/operators';
export class NzGraphData {
/** Toggles one single data node's expanded/collapsed state. */
toggle(nodeName) {
this.expansionModel.toggle(nodeName);
}
/** Expands one single data node. */
expand(nodeName) {
const compound = this.dataSource.compound || {};
const toBeSelected = this.findParents(compound, nodeName, [nodeName]);
this.expansionModel.select(...toBeSelected);
}
/** Collapses one single data node. */
collapse(nodeName) {
const compound = this.dataSource.compound || {};
const toBeDeselected = this.findChildren(compound, nodeName, [nodeName]);
this.expansionModel.deselect(...toBeDeselected);
}
/** Whether a given data node is expanded or not. Returns true if the data node is expanded. */
isExpanded(nodeName) {
return this.expansionModel.isSelected(nodeName);
}
/** Collapse all dataNodes in the tree. */
collapseAll() {
this.expansionModel.clear();
}
expandAll() {
this.expansionModel.select(...Object.keys(this._data.value.compound || {}));
}
setData(data) {
this.expansionModel?.clear();
this.dataSource = data;
this._data.next(data);
}
constructor(source) {
this._data = new BehaviorSubject({});
/** A selection model with multi-selection to track expansion status. */
this.expansionModel = new SelectionModel(true);
if (source) {
this.expansionModel?.clear();
this.dataSource = source;
this._data.next(source);
}
}
connect() {
const changes = [this._data, this.expansionModel.changed];
return merge(...changes).pipe(map(() => this._data.value));
}
disconnect() {
// do nothing for now
}
findParents(data, key, parents = []) {
const parent = Object.keys(data)
.filter(d => d !== key)
.find(d => data[d].includes(key));
if (!parent) {
return parents;
}
else {
return this.findParents(data, parent, [parent, ...parents]);
}
}
findChildren(data, key, children = []) {
const groupIds = Object.keys(data);
const child = (data[key] || []).filter((c) => groupIds.includes(c));
if (child && child.length > 0) {
return child.reduce((pre, cur) => Array.from(new Set([...pre, ...this.findChildren(data, cur, [...children, cur])])), children);
}
return children;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGgtZGF0YS1zb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb21wb25lbnRzL2dyYXBoL2RhdGEtc291cmNlL2dyYXBoLWRhdGEtc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFPckMsTUFBTSxPQUFPLFdBQVc7SUFNdEIsK0RBQStEO0lBQy9ELE1BQU0sQ0FBQyxRQUFnQjtRQUNyQixJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUN2QyxDQUFDO0lBRUQsb0NBQW9DO0lBQ3BDLE1BQU0sQ0FBQyxRQUFnQjtRQUNyQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsVUFBVSxDQUFDLFFBQVEsSUFBSSxFQUFFLENBQUM7UUFDaEQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUN0RSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxHQUFHLFlBQVksQ0FBQyxDQUFDO0lBQzlDLENBQUM7SUFFRCxzQ0FBc0M7SUFDdEMsUUFBUSxDQUFDLFFBQWdCO1FBQ3ZCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUNoRCxNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ3pFLElBQUksQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEdBQUcsY0FBYyxD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Q0FDN0IsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsR0FBRyxRQUFRLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDcEYsUUFBUSxDQUNULENBQUM7U0FDSDtRQUNELE9BQU8sUUFBUSxDQUFDO0lBQ2xCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9naXRodWIuY29tL05HLVpPUlJPL25nLXpvcnJvLWFudGQvYmxvYi9tYXN0ZXIvTElDRU5TRVxuICovXG5cbmltcG9ydCB7IFNlbGVjdGlvbk1vZGVsIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgbWVyZ2UsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcblxuaW1wb3J0IHsgTnpTYWZlQW55IH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL3R5cGVzJztcblxuaW1wb3J0IHsgTnpHcmFwaERhdGFEZWYgfSBmcm9tICcuLi9pbnRlcmZhY2UnO1xuaW1wb3J0IHsgTnpHcmFwaEJhc2VTb3VyY2UgfSBmcm9tICcuL2Jhc2UtZ3JhcGgtc291cmNlJztcblxuZXhwb3J0IGNsYXNzIE56R3JhcGhEYXRhIGltcGxlbWVudHMgTnpHcmFwaEJhc2VTb3VyY2U8TnpHcmFwaERhdGFEZWYsIHN0cmluZz4ge1xuICBwcml2YXRlIF9kYXRhID0gbmV3IEJlaGF2aW9yU3ViamVjdDxOekdyYXBoRGF0YURlZj4oe30gYXMgTnpHcmFwaERhdGFEZWYpO1xuICBkYXRhU291cmNlITogTnpHcmFwaERhdGFEZWY7XG4gIC8qKiBBIHNlbGVjdGlvbiBtb2RlbCB3aXRoIG11bHRpLXNlbGVjdGlvbiB0byB0cmFjayBleHBhbnNpb24gc3RhdHVzLiAqL1xuICBleHBhbnNpb25Nb2RlbDogU2VsZWN0aW9uTW9kZWw8c3RyaW5nPiA9IG5ldyBTZWxlY3Rpb25Nb2RlbDxzdHJpbmc+KHRydWUpO1xuXG4gIC8qKiBUb2dnbGVzIG9uZSBzaW5nbGUgZGF0YSBub2RlJ3MgZXhwYW5kZWQvY29sbGFwc2VkIHN0YXRlLiAqL1xuICB0b2dnbGUobm9kZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIHRoaXMuZXhwYW5zaW9uTW9kZWwudG9nZ2xlKG5vZGVOYW1lKTtcbiAgfVxuXG4gIC8qKiBFeHBhbmRzIG9uZSBzaW5nbGUgZGF0YSBub2RlLiAqL1xuICBleHBhbmQobm9kZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGNvbXBvdW5kID0gdGhpcy5kYXRhU291cmNlLmNvbXBvdW5kIHx8IHt9O1xuICAgIGNvbnN0IHRvQmVTZWxlY3RlZCA9IHRoaXMuZmluZFBhcmVudHMoY29tcG91bmQsIG5vZGVOYW1lLCBbbm9kZU5hbWVdKTtcbiAgICB0aGlzLmV4cGFuc2lvbk1vZGVsLnNlbGVjdCguLi50b0JlU2VsZWN0ZWQpO1xuICB9XG5cbiAgLyoqIENvbGxhcHNlcyBvbmUgc2luZ2xlIGRhdGEgbm9kZS4gKi9cbiAgY29sbGFwc2Uobm9kZU5hbWU6IHN0cmluZyk6IHZvaWQge1xuICAgIGNvbnN0IGNvbXBvdW5kID0gdGhpcy5kYXRhU291cmNlLmNvbXBvdW5kIHx8IHt9O1xuICAgIGNvbnN0IHRvQmVEZXNlbGVjdGVkID0gdGhpcy5maW5kQ2hpbGRyZW4oY29tcG91bmQsIG5vZGVOYW1lLCBbbm9kZU5hbWVdKTtcbiAgICB0aGlzLmV4cGFuc2lvbk1vZGVsLmRlc2VsZWN0KC4uLnRvQmVEZXNlbGVjdGVkKTtcbiAgfVxuXG4gIC8qKiBXaGV0aGVyIGEgZ2l2ZW4gZGF0YSBub2RlIGlzIGV4cGFuZGVkIG9yIG5vdC4gUmV0dXJucyB0cnVlIGlmIHRoZSBkYXRhIG5vZGUgaXMgZXhwYW5kZWQuICovXG4gIGlzRXhwYW5kZWQobm9kZU5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLmV4cGFuc2lvbk1vZGVsLmlzU2VsZWN0ZWQobm9kZU5hbWUpO1xuICB9XG5cbiAgLyoqIENvbGxhcHNlIGFsbCBkYXRhTm9kZXMgaW4gdGhlIHRyZWUuICovXG4gIGNvbGxhcHNlQWxsKCk6IHZvaWQge1xuICAgIHRoaXMuZXhwYW5zaW9uTW9kZWwuY2xlYXIoKTtcbiAgfVxuXG4gIGV4cGFuZEFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLmV4cGFuc2lvbk1vZGVsLnNlbGVjdCguLi5PYmplY3Qua2V5cyh0aGlzLl9kYXRhLnZhbHVlLmNvbXBvdW5kIHx8IHt9KSk7XG4gIH1cblxuICBzZXREYXRhKGRhdGE6IE56R3JhcGhEYXRhRGVmKTogdm9pZCB7XG4gICAgdGhpcy5leHBhbnNpb25Nb2RlbD8uY2xlYXIoKTtcbiAgICB0aGlzLmRhdGFTb3VyY2UgPSBkYXRhO1xuICAgIHRoaXMuX2RhdGEubmV4dChkYXRhKTtcbiAgfVxuXG4gIGNvbnN0cnVjdG9yKHNvdXJjZT86IE56R3JhcGhEYXRhRGVmKSB7XG4gICAgaWYgKHNvdXJjZSkge1xuICAgICAgdGhpcy5leHBhbnNpb25Nb2RlbD8uY2xlYXIoKTtcbiAgICAgIHRoaXMuZGF0YVNvdXJjZSA9IHNvdXJjZTtcbiAgICAgIHRoaXMuX2RhdGEubmV4dChzb3VyY2UpO1xuICAgIH1cbiAgfVxuXG4gIGNvbm5lY3QoKTogT2JzZXJ2YWJsZTxOekdyYXBoRGF0YURlZj4ge1xuICAgIGNvbnN0IGNoYW5nZXMgPSBbdGhpcy5fZGF0YSwgdGhpcy5leHBhbnNpb25Nb2RlbC5jaGFuZ2VkXTtcbiAgICByZXR1cm4gbWVyZ2UoLi4uY2hhbmdlcykucGlwZShtYXAoKCkgPT4gdGhpcy5fZGF0YS52YWx1ZSkpO1xuICB9XG5cbiAgZGlzY29ubmVjdCgpOiB2b2lkIHtcbiAgICAvLyBkbyBub3RoaW5nIGZvciBub3dcbiAgfVxuXG4gIHByaXZhdGUgZmluZFBhcmVudHMoZGF0YTogTnpTYWZlQW55LCBrZXk6IHN0cmluZywgcGFyZW50czogc3RyaW5nW10gPSBbXSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBwYXJlbnQgPSBPYmplY3Qua2V5cyhkYXRhKVxuICAgICAgLmZpbHRlcihkID0+IGQgIT09IGtleSlcbiAgICAgIC5maW5kKGQgPT4gZGF0YVtkXS5pbmNsdWRlcyhrZXkpKTtcbiAgICBpZiAoIXBhcmVudCkge1xuICAgICAgcmV0dXJuIHBhcmVudHM7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiB0aGlzLmZpbmRQYXJlbnRzKGRhdGEsIHBhcmVudCwgW3BhcmVudCwgLi4ucGFyZW50c10pO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgZmluZENoaWxkcmVuKGRhdGE6IE56U2FmZUFueSwga2V5OiBzdHJpbmcsIGNoaWxkcmVuOiBzdHJpbmdbXSA9IFtdKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IGdyb3VwSWRzID0gT2JqZWN0LmtleXMoZGF0YSk7XG4gICAgY29uc3QgY2hpbGQgPSAoZGF0YVtrZXldIHx8IFtdKS5maWx0ZXIoKGM6IHN0cmluZykgPT4gZ3JvdXBJZHMuaW5jbHVkZXMoYykpO1xuICAgIGlmIChjaGlsZCAmJiBjaGlsZC5sZW5ndGggPiAwKSB7XG4gICAgICByZXR1cm4gY2hpbGQucmVkdWNlKFxuICAgICAgICAocHJlOiBzdHJpbmdbXSwgY3VyOiBzdHJpbmcpID0+XG4gICAgICAgICAgQXJyYXkuZnJvbShuZXcgU2V0KFsuLi5wcmUsIC4uLnRoaXMuZmluZENoaWxkcmVuKGRhdGEsIGN1ciwgWy4uLmNoaWxkcmVuLCBjdXJdKV0pKSxcbiAgICAgICAgY2hpbGRyZW5cbiAgICAgICk7XG4gICAgfVxuICAgIHJldHVybiBjaGlsZHJlbjtcbiAgfVxufVxuIl19