UNPKG

ng-zorro-antd

Version:

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

82 lines 11.5 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) { var _a; this._data = new BehaviorSubject({}); /** A selection model with multi-selection to track expansion status. */ this.expansionModel = new SelectionModel(true); if (source) { (_a = this.expansionModel) === null || _a === void 0 ? void 0 : _a.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) { var _a; (_a = this.expansionModel) === null || _a === void 0 ? void 0 : _a.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) => { return Array.from(new Set([...pre, ...this.findChildren(data, cur, [...children, cur])])); }, children); } return children; } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ3JhcGgtZGF0YS1zb3VyY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9jb21wb25lbnRzL2dyYXBoL2RhdGEtc291cmNlL2dyYXBoLWRhdGEtc291cmNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7R0FHRztBQUVILE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQztBQUUxRCxPQUFPLEVBQUUsZUFBZSxFQUFFLEtBQUssRUFBYyxNQUFNLE1BQU0sQ0FBQztBQUMxRCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFJckMsTUFBTSxPQUFPLFdBQVc7SUE2Q3RCLFlBQVksTUFBdUI7O1FBNUMzQixVQUFLLEdBQUcsSUFBSSxlQUFlLENBQWlCLEVBQW9CLENBQUMsQ0FBQztRQUUxRSx3RUFBd0U7UUFDeEUsbUJBQWMsR0FBMkIsSUFBSSxjQUFjLENBQVMsSUFBSSxDQUFDLENBQUM7UUEwQ3hFLElBQUksTUFBTSxFQUFFO1lBQ1YsTUFBQSxJQUFJLENBQUMsY0FBYywwQ0FBRSxLQUFLLEdBQUc7WUFDN0IsSUFBSSxDQUFDLFVBQVUsR0FBRyxNQUFNLENBQUM7WUFDekIsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7U0FDekI7SUFDSCxDQUFDO0lBN0NELCtEQUErRDtJQUMvRCxNQUFNLENBQUMsUUFBZ0I7UUFDckIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDdkMsQ0FBQztJQUVELG9DQUFvQztJQUNwQyxNQUFNLENBQUMsUUFBZ0I7UUFDckIsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxRQUFRLElBQUksRUFBRSxDQUFDO1FBQ2hELE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7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RUFBRTtnQkFDakQsT0FBTyxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLEVBQUUsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQzVGLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztTQUNkO1FBQ0QsT0FBTyxRQUFRLENBQUM7SUFDbEIsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2dpdGh1Yi5jb20vTkctWk9SUk8vbmctem9ycm8tYW50ZC9ibG9iL21hc3Rlci9MSUNFTlNFXG4gKi9cblxuaW1wb3J0IHsgU2VsZWN0aW9uTW9kZWwgfSBmcm9tICdAYW5ndWxhci9jZGsvY29sbGVjdGlvbnMnO1xuaW1wb3J0IHsgTnpTYWZlQW55IH0gZnJvbSAnbmctem9ycm8tYW50ZC9jb3JlL3R5cGVzJztcbmltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgbWVyZ2UsIE9ic2VydmFibGUgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IG1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJztcbmltcG9ydCB7IE56R3JhcGhEYXRhRGVmIH0gZnJvbSAnLi4vaW50ZXJmYWNlJztcbmltcG9ydCB7IE56R3JhcGhCYXNlU291cmNlIH0gZnJvbSAnLi9iYXNlLWdyYXBoLXNvdXJjZSc7XG5cbmV4cG9ydCBjbGFzcyBOekdyYXBoRGF0YSBpbXBsZW1lbnRzIE56R3JhcGhCYXNlU291cmNlPE56R3JhcGhEYXRhRGVmLCBzdHJpbmc+IHtcbiAgcHJpdmF0ZSBfZGF0YSA9IG5ldyBCZWhhdmlvclN1YmplY3Q8TnpHcmFwaERhdGFEZWY+KHt9IGFzIE56R3JhcGhEYXRhRGVmKTtcbiAgZGF0YVNvdXJjZSE6IE56R3JhcGhEYXRhRGVmO1xuICAvKiogQSBzZWxlY3Rpb24gbW9kZWwgd2l0aCBtdWx0aS1zZWxlY3Rpb24gdG8gdHJhY2sgZXhwYW5zaW9uIHN0YXR1cy4gKi9cbiAgZXhwYW5zaW9uTW9kZWw6IFNlbGVjdGlvbk1vZGVsPHN0cmluZz4gPSBuZXcgU2VsZWN0aW9uTW9kZWw8c3RyaW5nPih0cnVlKTtcblxuICAvKiogVG9nZ2xlcyBvbmUgc2luZ2xlIGRhdGEgbm9kZSdzIGV4cGFuZGVkL2NvbGxhcHNlZCBzdGF0ZS4gKi9cbiAgdG9nZ2xlKG5vZGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICB0aGlzLmV4cGFuc2lvbk1vZGVsLnRvZ2dsZShub2RlTmFtZSk7XG4gIH1cblxuICAvKiogRXhwYW5kcyBvbmUgc2luZ2xlIGRhdGEgbm9kZS4gKi9cbiAgZXhwYW5kKG5vZGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjb21wb3VuZCA9IHRoaXMuZGF0YVNvdXJjZS5jb21wb3VuZCB8fCB7fTtcbiAgICBjb25zdCB0b0JlU2VsZWN0ZWQgPSB0aGlzLmZpbmRQYXJlbnRzKGNvbXBvdW5kLCBub2RlTmFtZSwgW25vZGVOYW1lXSk7XG4gICAgdGhpcy5leHBhbnNpb25Nb2RlbC5zZWxlY3QoLi4udG9CZVNlbGVjdGVkKTtcbiAgfVxuXG4gIC8qKiBDb2xsYXBzZXMgb25lIHNpbmdsZSBkYXRhIG5vZGUuICovXG4gIGNvbGxhcHNlKG5vZGVOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjb21wb3VuZCA9IHRoaXMuZGF0YVNvdXJjZS5jb21wb3VuZCB8fCB7fTtcbiAgICBjb25zdCB0b0JlRGVzZWxlY3RlZCA9IHRoaXMuZmluZENoaWxkcmVuKGNvbXBvdW5kLCBub2RlTmFtZSwgW25vZGVOYW1lXSk7XG4gICAgdGhpcy5leHBhbnNpb25Nb2RlbC5kZXNlbGVjdCguLi50b0JlRGVzZWxlY3RlZCk7XG4gIH1cblxuICAvKiogV2hldGhlciBhIGdpdmVuIGRhdGEgbm9kZSBpcyBleHBhbmRlZCBvciBub3QuIFJldHVybnMgdHJ1ZSBpZiB0aGUgZGF0YSBub2RlIGlzIGV4cGFuZGVkLiAqL1xuICBpc0V4cGFuZGVkKG5vZGVOYW1lOiBzdHJpbmcpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5leHBhbnNpb25Nb2RlbC5pc1NlbGVjdGVkKG5vZGVOYW1lKTtcbiAgfVxuXG4gIC8qKiBDb2xsYXBzZSBhbGwgZGF0YU5vZGVzIGluIHRoZSB0cmVlLiAqL1xuICBjb2xsYXBzZUFsbCgpOiB2b2lkIHtcbiAgICB0aGlzLmV4cGFuc2lvbk1vZGVsLmNsZWFyKCk7XG4gIH1cblxuICBleHBhbmRBbGwoKTogdm9pZCB7XG4gICAgdGhpcy5leHBhbnNpb25Nb2RlbC5zZWxlY3QoLi4uT2JqZWN0LmtleXModGhpcy5fZGF0YS52YWx1ZS5jb21wb3VuZCB8fCB7fSkpO1xuICB9XG5cbiAgc2V0RGF0YShkYXRhOiBOekdyYXBoRGF0YURlZik6IHZvaWQge1xuICAgIHRoaXMuZXhwYW5zaW9uTW9kZWw/LmNsZWFyKCk7XG4gICAgdGhpcy5kYXRhU291cmNlID0gZGF0YTtcbiAgICB0aGlzLl9kYXRhLm5leHQoZGF0YSk7XG4gIH1cblxuICBjb25zdHJ1Y3Rvcihzb3VyY2U/OiBOekdyYXBoRGF0YURlZikge1xuICAgIGlmIChzb3VyY2UpIHtcbiAgICAgIHRoaXMuZXhwYW5zaW9uTW9kZWw/LmNsZWFyKCk7XG4gICAgICB0aGlzLmRhdGFTb3VyY2UgPSBzb3VyY2U7XG4gICAgICB0aGlzLl9kYXRhLm5leHQoc291cmNlKTtcbiAgICB9XG4gIH1cblxuICBjb25uZWN0KCk6IE9ic2VydmFibGU8TnpHcmFwaERhdGFEZWY+IHtcbiAgICBjb25zdCBjaGFuZ2VzID0gW3RoaXMuX2RhdGEsIHRoaXMuZXhwYW5zaW9uTW9kZWwuY2hhbmdlZF07XG4gICAgcmV0dXJuIG1lcmdlKC4uLmNoYW5nZXMpLnBpcGUobWFwKCgpID0+IHRoaXMuX2RhdGEudmFsdWUpKTtcbiAgfVxuXG4gIGRpc2Nvbm5lY3QoKTogdm9pZCB7XG4gICAgLy8gZG8gbm90aGluZyBmb3Igbm93XG4gIH1cblxuICBwcml2YXRlIGZpbmRQYXJlbnRzKGRhdGE6IE56U2FmZUFueSwga2V5OiBzdHJpbmcsIHBhcmVudHM6IHN0cmluZ1tdID0gW10pOiBzdHJpbmdbXSB7XG4gICAgY29uc3QgcGFyZW50ID0gT2JqZWN0LmtleXMoZGF0YSlcbiAgICAgIC5maWx0ZXIoZCA9PiBkICE9PSBrZXkpXG4gICAgICAuZmluZChkID0+IGRhdGFbZF0uaW5jbHVkZXMoa2V5KSk7XG4gICAgaWYgKCFwYXJlbnQpIHtcbiAgICAgIHJldHVybiBwYXJlbnRzO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gdGhpcy5maW5kUGFyZW50cyhkYXRhLCBwYXJlbnQsIFtwYXJlbnQsIC4uLnBhcmVudHNdKTtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGZpbmRDaGlsZHJlbihkYXRhOiBOelNhZmVBbnksIGtleTogc3RyaW5nLCBjaGlsZHJlbjogc3RyaW5nW10gPSBbXSk6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBncm91cElkcyA9IE9iamVjdC5rZXlzKGRhdGEpO1xuICAgIGNvbnN0IGNoaWxkID0gKGRhdGFba2V5XSB8fCBbXSkuZmlsdGVyKChjOiBzdHJpbmcpID0+IGdyb3VwSWRzLmluY2x1ZGVzKGMpKTtcbiAgICBpZiAoY2hpbGQgJiYgY2hpbGQubGVuZ3RoID4gMCkge1xuICAgICAgcmV0dXJuIGNoaWxkLnJlZHVjZSgocHJlOiBzdHJpbmdbXSwgY3VyOiBzdHJpbmcpID0+IHtcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldChbLi4ucHJlLCAuLi50aGlzLmZpbmRDaGlsZHJlbihkYXRhLCBjdXIsIFsuLi5jaGlsZHJlbiwgY3VyXSldKSk7XG4gICAgICB9LCBjaGlsZHJlbik7XG4gICAgfVxuICAgIHJldHVybiBjaGlsZHJlbjtcbiAgfVxufVxuIl19