UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

79 lines 10.8 kB
import { BehaviorSubject, merge } from 'rxjs'; import { map } from 'rxjs/operators'; export class DynamicDataSource { get data() { return this.dataChange.value; } set data(value) { this.treeControl.dataNodes = value; this.dataChange.next(value); } constructor(treeControl, addressSpaceService, serverId) { this.treeControl = treeControl; this.addressSpaceService = addressSpaceService; this.serverId = serverId; this.dataChange = new BehaviorSubject([]); this.treeControl.isExpanded = (node) => node.expanded; } connect(collectionViewer) { this.treeControl.expansionModel.changed.subscribe((change) => { if (change.added || change.removed) { this.handleTreeControl(change); } }); return merge(collectionViewer.viewChange, this.dataChange).pipe(map(() => this.data)); } /** Handle expand/collapse behaviors */ handleTreeControl(change) { if (change.added) { change.added.forEach(node => this.toggleNode(node, true)); } if (change.removed) { change.removed .slice() .reverse() .forEach(node => this.toggleNode(node, false)); } } /** * Toggle the node, remove from display list */ async toggleNode(addressSpaceNode, expand) { if (!addressSpaceNode.children || addressSpaceNode.children.length === 0) { addressSpaceNode.currentlyLoadingChildren = true; const res = await this.addressSpaceService.getChildrenOf(addressSpaceNode, this.serverId); const children = (await res.json()); addressSpaceNode.children = children || []; addressSpaceNode.children = addressSpaceNode.children.map((node) => { node.parentNode = addressSpaceNode; return node; }); addressSpaceNode.currentlyLoadingChildren = false; this.treeControl.expand(addressSpaceNode); } addressSpaceNode.expanded = expand && addressSpaceNode.children.length > 0; this.refreshNestedTree(this.data); return Promise.resolve(addressSpaceNode); } catch() { // do nothing } refreshNestedTree(treeData) { // necessary to rerender tree, otherwise new nodes will not // appear, but they are added to the list. this.data = []; this.dataChange.next(treeData); this.triggerResize(); // to resize the modal window when creating a new device protocol } triggerResize() { setTimeout(() => { try { window.dispatchEvent(new Event('resize')); } catch (error) { // do nothing } }, 200); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHluYW1pYy1kYXRhLXNvdXJjZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3Byb3RvY29sLW9wY3VhL2R5bmFtaWMtZGF0YS1zb3VyY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBYyxLQUFLLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFJMUQsT0FBTyxFQUFFLEdBQUcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRXJDLE1BQU0sT0FBTyxpQkFBaUI7SUFHNUIsSUFBSSxJQUFJO1FBQ04sT0FBTyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQztJQUMvQixDQUFDO0lBQ0QsSUFBSSxJQUFJLENBQUMsS0FBeUI7UUFDaEMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ25DLElBQUksQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlCLENBQUM7SUFFRCxZQUNTLFdBQWdELEVBQy9DLG1CQUF3QyxFQUN4QyxRQUFnQjtRQUZqQixnQkFBVyxHQUFYLFdBQVcsQ0FBcUM7UUFDL0Msd0JBQW1CLEdBQW5CLG1CQUFtQixDQUFxQjtRQUN4QyxhQUFRLEdBQVIsUUFBUSxDQUFRO1FBYjFCLGVBQVUsR0FBRyxJQUFJLGVBQWUsQ0FBcUIsRUFBRSxDQUFDLENBQUM7UUFldkQsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxJQUFzQixFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDO0lBQzFFLENBQUM7SUFFRCxPQUFPLENBQUMsZ0JBQWtDO1FBQ3hDLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxTQUFTLENBQy9DLENBQUMsTUFBeUMsRUFBRSxFQUFFO1lBQzVDLElBQUksTUFBTSxDQUFDLEtBQUssSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQ25DLElBQUksQ0FB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QUFhO1lBQ2YsQ0FBQztRQUNILENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQztJQUNWLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCwgT2JzZXJ2YWJsZSwgbWVyZ2UgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IE5lc3RlZFRyZWVDb250cm9sIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL3RyZWUnO1xuaW1wb3J0IHsgQ29sbGVjdGlvblZpZXdlciwgU2VsZWN0aW9uQ2hhbmdlIH0gZnJvbSAnQGFuZ3VsYXIvY2RrL2NvbGxlY3Rpb25zJztcbmltcG9ydCB7IEFkZHJlc3NTcGFjZVNlcnZpY2UsIEFkZHJlc3NTcGFjZU5vZGUgfSBmcm9tICcuL2FkZHJlc3Mtc3BhY2Uuc2VydmljZSc7XG5pbXBvcnQgeyBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbmV4cG9ydCBjbGFzcyBEeW5hbWljRGF0YVNvdXJjZSB7XG4gIGRhdGFDaGFuZ2UgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PEFkZHJlc3NTcGFjZU5vZGVbXT4oW10pO1xuXG4gIGdldCBkYXRhKCk6IEFkZHJlc3NTcGFjZU5vZGVbXSB7XG4gICAgcmV0dXJuIHRoaXMuZGF0YUNoYW5nZS52YWx1ZTtcbiAgfVxuICBzZXQgZGF0YSh2YWx1ZTogQWRkcmVzc1NwYWNlTm9kZVtdKSB7XG4gICAgdGhpcy50cmVlQ29udHJvbC5kYXRhTm9kZXMgPSB2YWx1ZTtcbiAgICB0aGlzLmRhdGFDaGFuZ2UubmV4dCh2YWx1ZSk7XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICBwdWJsaWMgdHJlZUNvbnRyb2w6IE5lc3RlZFRyZWVDb250cm9sPEFkZHJlc3NTcGFjZU5vZGU+LFxuICAgIHByaXZhdGUgYWRkcmVzc1NwYWNlU2VydmljZTogQWRkcmVzc1NwYWNlU2VydmljZSxcbiAgICBwcml2YXRlIHNlcnZlcklkOiBzdHJpbmdcbiAgKSB7XG4gICAgdGhpcy50cmVlQ29udHJvbC5pc0V4cGFuZGVkID0gKG5vZGU6IEFkZHJlc3NTcGFjZU5vZGUpID0+IG5vZGUuZXhwYW5kZWQ7XG4gIH1cblxuICBjb25uZWN0KGNvbGxlY3Rpb25WaWV3ZXI6IENvbGxlY3Rpb25WaWV3ZXIpOiBPYnNlcnZhYmxlPEFkZHJlc3NTcGFjZU5vZGVbXT4ge1xuICAgIHRoaXMudHJlZUNvbnRyb2wuZXhwYW5zaW9uTW9kZWwuY2hhbmdlZC5zdWJzY3JpYmUoXG4gICAgICAoY2hhbmdlOiBTZWxlY3Rpb25DaGFuZ2U8QWRkcmVzc1NwYWNlTm9kZT4pID0+IHtcbiAgICAgICAgaWYgKGNoYW5nZS5hZGRlZCB8fCBjaGFuZ2UucmVtb3ZlZCkge1xuICAgICAgICAgIHRoaXMuaGFuZGxlVHJlZUNvbnRyb2woY2hhbmdlKTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICk7XG4gICAgcmV0dXJuIG1lcmdlKGNvbGxlY3Rpb25WaWV3ZXIudmlld0NoYW5nZSwgdGhpcy5kYXRhQ2hhbmdlKS5waXBlKG1hcCgoKSA9PiB0aGlzLmRhdGEpKTtcbiAgfVxuXG4gIC8qKiBIYW5kbGUgZXhwYW5kL2NvbGxhcHNlIGJlaGF2aW9ycyAqL1xuICBoYW5kbGVUcmVlQ29udHJvbChjaGFuZ2U6IFNlbGVjdGlvbkNoYW5nZTxBZGRyZXNzU3BhY2VOb2RlPikge1xuICAgIGlmIChjaGFuZ2UuYWRkZWQpIHtcbiAgICAgIGNoYW5nZS5hZGRlZC5mb3JFYWNoKG5vZGUgPT4gdGhpcy50b2dnbGVOb2RlKG5vZGUsIHRydWUpKTtcbiAgICB9XG4gICAgaWYgKGNoYW5nZS5yZW1vdmVkKSB7XG4gICAgICBjaGFuZ2UucmVtb3ZlZFxuICAgICAgICAuc2xpY2UoKVxuICAgICAgICAucmV2ZXJzZSgpXG4gICAgICAgIC5mb3JFYWNoKG5vZGUgPT4gdGhpcy50b2dnbGVOb2RlKG5vZGUsIGZhbHNlKSk7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIFRvZ2dsZSB0aGUgbm9kZSwgcmVtb3ZlIGZyb20gZGlzcGxheSBsaXN0XG4gICAqL1xuICBhc3luYyB0b2dnbGVOb2RlKGFkZHJlc3NTcGFjZU5vZGU6IEFkZHJlc3NTcGFjZU5vZGUsIGV4cGFuZDogYm9vbGVhbikge1xuICAgIGlmICghYWRkcmVzc1NwYWNlTm9kZS5jaGlsZHJlbiB8fCBhZGRyZXNzU3BhY2VOb2RlLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkge1xuICAgICAgYWRkcmVzc1NwYWNlTm9kZS5jdXJyZW50bHlMb2FkaW5nQ2hpbGRyZW4gPSB0cnVlO1xuXG4gICAgICBjb25zdCByZXMgPSBhd2FpdCB0aGlzLmFkZHJlc3NTcGFjZVNlcnZpY2UuZ2V0Q2hpbGRyZW5PZihhZGRyZXNzU3BhY2VOb2RlLCB0aGlzLnNlcnZlcklkKTtcbiAgICAgIGNvbnN0IGNoaWxkcmVuID0gKGF3YWl0IHJlcy5qc29uKCkpIGFzIEFkZHJlc3NTcGFjZU5vZGVbXTtcblxuICAgICAgYWRkcmVzc1NwYWNlTm9kZS5jaGlsZHJlbiA9IGNoaWxkcmVuIHx8IFtdO1xuICAgICAgYWRkcmVzc1NwYWNlTm9kZS5jaGlsZHJlbiA9IGFkZHJlc3NTcGFjZU5vZGUuY2hpbGRyZW4ubWFwKChub2RlOiBBZGRyZXNzU3BhY2VOb2RlKSA9PiB7XG4gICAgICAgIG5vZGUucGFyZW50Tm9kZSA9IGFkZHJlc3NTcGFjZU5vZGU7XG4gICAgICAgIHJldHVybiBub2RlO1xuICAgICAgfSk7XG4gICAgICBhZGRyZXNzU3BhY2VOb2RlLmN1cnJlbnRseUxvYWRpbmdDaGlsZHJlbiA9IGZhbHNlO1xuXG4gICAgICB0aGlzLnRyZWVDb250cm9sLmV4cGFuZChhZGRyZXNzU3BhY2VOb2RlKTtcbiAgICB9XG5cbiAgICBhZGRyZXNzU3BhY2VOb2RlLmV4cGFuZGVkID0gZXhwYW5kICYmIGFkZHJlc3NTcGFjZU5vZGUuY2hpbGRyZW4ubGVuZ3RoID4gMDtcbiAgICB0aGlzLnJlZnJlc2hOZXN0ZWRUcmVlKHRoaXMuZGF0YSk7XG5cbiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGFkZHJlc3NTcGFjZU5vZGUpO1xuICB9XG4gIGNhdGNoKCkge1xuICAgIC8vIGRvIG5vdGhpbmdcbiAgfVxuXG4gIHByaXZhdGUgcmVmcmVzaE5lc3RlZFRyZWUodHJlZURhdGE6IEFkZHJlc3NTcGFjZU5vZGVbXSkge1xuICAgIC8vIG5lY2Vzc2FyeSB0byByZXJlbmRlciB0cmVlLCBvdGhlcndpc2UgbmV3IG5vZGVzIHdpbGwgbm90XG4gICAgLy8gYXBwZWFyLCBidXQgdGhleSBhcmUgYWRkZWQgdG8gdGhlIGxpc3QuXG4gICAgdGhpcy5kYXRhID0gW107XG4gICAgdGhpcy5kYXRhQ2hhbmdlLm5leHQodHJlZURhdGEpO1xuICAgIHRoaXMudHJpZ2dlclJlc2l6ZSgpOyAvLyB0byByZXNpemUgdGhlIG1vZGFsIHdpbmRvdyB3aGVuIGNyZWF0aW5nIGEgbmV3IGRldmljZSBwcm90b2NvbFxuICB9XG5cbiAgcHJpdmF0ZSB0cmlnZ2VyUmVzaXplKCkge1xuICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgdHJ5IHtcbiAgICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdyZXNpemUnKSk7XG4gICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAvLyBkbyBub3RoaW5nXG4gICAgICB9XG4gICAgfSwgMjAwKTtcbiAgfVxufVxuIl19