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 {
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=