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 { 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); } } /** 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); } 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGgtZGF0YS1zb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb21wb25lbnRzL2dyYXBoL2RhdGEtc291cmNlL2dyYXBoLWRhdGEtc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUMxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFPckMsTUFBTSxPQUFPLFdBQVc7SUE2Q3RCLFlBQVksTUFBdUI7UUE1QzNCLFVBQUssR0FBRyxJQUFJLGVBQWUsQ0FBaUIsRUFBb0IsQ0FBQyxDQUFDO1FBRTFFLHdFQUF3RTtRQUN4RSxtQkFBYyxHQUEyQixJQUFJLGNBQWMsQ0FBUyxJQUFJLENBQUMsQ0FBQztRQTBDeEUsSUFBSSxNQUFNLEVBQUU7WUFDVixJQUFJLENBQUMsY0FBYyxFQUFFLEtBQUssRUFBRSxDQUFDO1lBQzdCLElBQUksQ0FBQyxVQUFVLEdBQUcsTUFBTSxDQUFDO1lBQ3pCLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3pCO0lBQ0gsQ0FBQztJQTdDRCwrREFBK0Q7SUFDL0QsTUFBTSxDQUFDLFFBQWdCO1FBQ3JCLElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQ3ZDLENBQUM7SUFFRCxvQ0FBb0M7SUFDcEMsTUFBTSxDQUFDLFFBQWdCO1FBQ3JCLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxJQUFJLEVBQUUsQ0FBQztRQUNoRCxNQUFNLFlBQVksR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FB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RSxDQUM3QixLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUNwRixRQUFRLENBQ1QsQ0FBQztTQUNIO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vTkctWk9SUk8vbmctem9ycm8tYW50ZC9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgQmVoYXZpb3JTdWJqZWN0LCBtZXJnZSwgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5pbXBvcnQgeyBOelNhZmVBbnkgfSBmcm9tICduZy16b3Jyby1hbnRkL2NvcmUvdHlwZXMnO1xuXG5pbXBvcnQgeyBOekdyYXBoRGF0YURlZiB9IGZyb20gJy4uL2ludGVyZmFjZSc7XG5pbXBvcnQgeyBOekdyYXBoQmFzZVNvdXJjZSB9IGZyb20gJy4vYmFzZS1ncmFwaC1zb3VyY2UnO1xuXG5leHBvcnQgY2xhc3MgTnpHcmFwaERhdGEgaW1wbGVtZW50cyBOekdyYXBoQmFzZVNvdXJjZTxOekdyYXBoRGF0YURlZiwgc3RyaW5nPiB7XG4gIHByaXZhdGUgX2RhdGEgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PE56R3JhcGhEYXRhRGVmPih7fSBhcyBOekdyYXBoRGF0YURlZik7XG4gIGRhdGFTb3VyY2UhOiBOekdyYXBoRGF0YURlZjtcbiAgLyoqIEEgc2VsZWN0aW9uIG1vZGVsIHdpdGggbXVsdGktc2VsZWN0aW9uIHRvIHRyYWNrIGV4cGFuc2lvbiBzdGF0dXMuICovXG4gIGV4cGFuc2lvbk1vZGVsOiBTZWxlY3Rpb25Nb2RlbDxzdHJpbmc+ID0gbmV3IFNlbGVjdGlvbk1vZGVsPHN0cmluZz4odHJ1ZSk7XG5cbiAgLyoqIFRvZ2dsZXMgb25lIHNpbmdsZSBkYXRhIG5vZGUncyBleHBhbmRlZC9jb2xsYXBzZWQgc3RhdGUuICovXG4gIHRvZ2dsZShub2RlTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5leHBhbnNpb25Nb2RlbC50b2dnbGUobm9kZU5hbWUpO1xuICB9XG5cbiAgLyoqIEV4cGFuZHMgb25lIHNpbmdsZSBkYXRhIG5vZGUuICovXG4gIGV4cGFuZChub2RlTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgY29tcG91bmQgPSB0aGlzLmRhdGFTb3VyY2UuY29tcG91bmQgfHwge307XG4gICAgY29uc3QgdG9CZVNlbGVjdGVkID0gdGhpcy5maW5kUGFyZW50cyhjb21wb3VuZCwgbm9kZU5hbWUsIFtub2RlTmFtZV0pO1xuICAgIHRoaXMuZXhwYW5zaW9uTW9kZWwuc2VsZWN0KC4uLnRvQmVTZWxlY3RlZCk7XG4gIH1cblxuICAvKiogQ29sbGFwc2VzIG9uZSBzaW5nbGUgZGF0YSBub2RlLiAqL1xuICBjb2xsYXBzZShub2RlTmFtZTogc3RyaW5nKTogdm9pZCB7XG4gICAgY29uc3QgY29tcG91bmQgPSB0aGlzLmRhdGFTb3VyY2UuY29tcG91bmQgfHwge307XG4gICAgY29uc3QgdG9CZURlc2VsZWN0ZWQgPSB0aGlzLmZpbmRDaGlsZHJlbihjb21wb3VuZCwgbm9kZU5hbWUsIFtub2RlTmFtZV0pO1xuICAgIHRoaXMuZXhwYW5zaW9uTW9kZWwuZGVzZWxlY3QoLi4udG9CZURlc2VsZWN0ZWQpO1xuICB9XG5cbiAgLyoqIFdoZXRoZXIgYSBnaXZlbiBkYXRhIG5vZGUgaXMgZXhwYW5kZWQgb3Igbm90LiBSZXR1cm5zIHRydWUgaWYgdGhlIGRhdGEgbm9kZSBpcyBleHBhbmRlZC4gKi9cbiAgaXNFeHBhbmRlZChub2RlTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuZXhwYW5zaW9uTW9kZWwuaXNTZWxlY3RlZChub2RlTmFtZSk7XG4gIH1cblxuICAvKiogQ29sbGFwc2UgYWxsIGRhdGFOb2RlcyBpbiB0aGUgdHJlZS4gKi9cbiAgY29sbGFwc2VBbGwoKTogdm9pZCB7XG4gICAgdGhpcy5leHBhbnNpb25Nb2RlbC5jbGVhcigpO1xuICB9XG5cbiAgZXhwYW5kQWxsKCk6IHZvaWQge1xuICAgIHRoaXMuZXhwYW5zaW9uTW9kZWwuc2VsZWN0KC4uLk9iamVjdC5rZXlzKHRoaXMuX2RhdGEudmFsdWUuY29tcG91bmQgfHwge30pKTtcbiAgfVxuXG4gIHNldERhdGEoZGF0YTogTnpHcmFwaERhdGFEZWYpOiB2b2lkIHtcbiAgICB0aGlzLmV4cGFuc2lvbk1vZGVsPy5jbGVhcigpO1xuICAgIHRoaXMuZGF0YVNvdXJjZSA9IGRhdGE7XG4gICAgdGhpcy5fZGF0YS5uZXh0KGRhdGEpO1xuICB9XG5cbiAgY29uc3RydWN0b3Ioc291cmNlPzogTnpHcmFwaERhdGFEZWYpIHtcbiAgICBpZiAoc291cmNlKSB7XG4gICAgICB0aGlzLmV4cGFuc2lvbk1vZGVsPy5jbGVhcigpO1xuICAgICAgdGhpcy5kYXRhU291cmNlID0gc291cmNlO1xuICAgICAgdGhpcy5fZGF0YS5uZXh0KHNvdXJjZSk7XG4gICAgfVxuICB9XG5cbiAgY29ubmVjdCgpOiBPYnNlcnZhYmxlPE56R3JhcGhEYXRhRGVmPiB7XG4gICAgY29uc3QgY2hhbmdlcyA9IFt0aGlzLl9kYXRhLCB0aGlzLmV4cGFuc2lvbk1vZGVsLmNoYW5nZWRdO1xuICAgIHJldHVybiBtZXJnZSguLi5jaGFuZ2VzKS5waXBlKG1hcCgoKSA9PiB0aGlzLl9kYXRhLnZhbHVlKSk7XG4gIH1cblxuICBkaXNjb25uZWN0KCk6IHZvaWQge1xuICAgIC8vIGRvIG5vdGhpbmcgZm9yIG5vd1xuICB9XG5cbiAgcHJpdmF0ZSBmaW5kUGFyZW50cyhkYXRhOiBOelNhZmVBbnksIGtleTogc3RyaW5nLCBwYXJlbnRzOiBzdHJpbmdbXSA9IFtdKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHBhcmVudCA9IE9iamVjdC5rZXlzKGRhdGEpXG4gICAgICAuZmlsdGVyKGQgPT4gZCAhPT0ga2V5KVxuICAgICAgLmZpbmQoZCA9PiBkYXRhW2RdLmluY2x1ZGVzKGtleSkpO1xuICAgIGlmICghcGFyZW50KSB7XG4gICAgICByZXR1cm4gcGFyZW50cztcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHRoaXMuZmluZFBhcmVudHMoZGF0YSwgcGFyZW50LCBbcGFyZW50LCAuLi5wYXJlbnRzXSk7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBmaW5kQ2hpbGRyZW4oZGF0YTogTnpTYWZlQW55LCBrZXk6IHN0cmluZywgY2hpbGRyZW46IHN0cmluZ1tdID0gW10pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgZ3JvdXBJZHMgPSBPYmplY3Qua2V5cyhkYXRhKTtcbiAgICBjb25zdCBjaGlsZCA9IChkYXRhW2tleV0gfHwgW10pLmZpbHRlcigoYzogc3RyaW5nKSA9PiBncm91cElkcy5pbmNsdWRlcyhjKSk7XG4gICAgaWYgKGNoaWxkICYmIGNoaWxkLmxlbmd0aCA+IDApIHtcbiAgICAgIHJldHVybiBjaGlsZC5yZWR1Y2UoXG4gICAgICAgIChwcmU6IHN0cmluZ1tdLCBjdXI6IHN0cmluZykgPT5cbiAgICAgICAgICBBcnJheS5mcm9tKG5ldyBTZXQoWy4uLnByZSwgLi4udGhpcy5maW5kQ2hpbGRyZW4oZGF0YSwgY3VyLCBbLi4uY2hpbGRyZW4sIGN1cl0pXSkpLFxuICAgICAgICBjaGlsZHJlblxuICAgICAgKTtcbiAgICB9XG4gICAgcmV0dXJuIGNoaWxkcmVuO1xuICB9XG59XG4iXX0=