@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
79 lines • 10.8 kB
JavaScript
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