UNPKG

ng-zorro-antd

Version:

An enterprise-class UI components based on Ant Design and Angular

78 lines 11.3 kB
/** * 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