UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

140 lines • 16.1 kB
import { EventEmitter } from '@angular/core'; export class AssetSelectorBase { constructor(groupNodeService, inventory, assetSelectorService) { this.groupNodeService = groupNodeService; this.inventory = inventory; this.assetSelectorService = assetSelectorService; /** * Config object containing all options for the asset selector. */ this.config = {}; /** * The loading state of the current node. */ this.isLoading = false; /** * Emit the selected asset or assets. */ this.onSelected = new EventEmitter(); /** * Emits if the currently selected asset is cleared. */ this.onClearSelected = new EventEmitter(); } /** * @ignore */ validate(control) { if (this.config.required && (!control.value || control.value.length === 0)) { return { required: true }; } return null; } /** * @ignore */ writeValue(obj) { this.selected = this.assetSelectorService.normalizeValue(obj, this.config.modelMode); } /** * @ignore */ registerOnChange(fn) { this.onChange = fn; } /** * @ignore */ registerOnTouched(fn) { this.onTouched = fn; } /** * @ignore */ doBlur() { if (this.onTouched) { this.onTouched(); } } /** * Deselects all expect the given one. * @param selectedMo The selected asset (optional, if empty -> just deselect all). */ deselectAll(selectedMo) { this.selected = []; if (selectedMo) { this.selected = [this.assetSelectorService.simplifyModel(selectedMo, this.config.modelMode)]; } this.emitChange(this.selected, selectedMo, !!selectedMo); this.doBlur(); } /** * Adds an managed object to the selected array and emits the change. * @param selectedMo The selected asset. */ select(selectedMo) { if (!this.config.multi) { this.selected = []; } const index = this.getIndexOfSelected(this.selected, selectedMo); if (index === -1) { this.selected.push(this.assetSelectorService.simplifyModel(selectedMo, this.config.modelMode)); } this.emitChange(this.selected, selectedMo, true); this.doBlur(); } /** * Removes a managed object from the selected array and emits the change. * @param selectedMo The selected asset. */ deselect(selectedMo) { const index = this.getIndexOfSelected(this.selected, selectedMo); if (index > -1) { this.selected.splice(index, 1); } this.emitChange(this.selected, selectedMo, false); this.doBlur(); } /** * Returns the index of the currently selected item. * @param selected All selected items * @param selectedMo The new selected item- * @returns An index, or -1 if not found. */ getIndexOfSelected(selected, selectedMo) { return selected.findIndex(mo => mo.id === selectedMo.id); } emitChange(selected, item, isSelected) { const changes = this.config.multi ? selected : selected[0]; if (this.onChange) { this.onChange(changes); } this.onSelected.emit({ items: changes, change: { item, isSelected } }); } createDefaultRootNode() { return this.groupNodeService.createGroupNode({ root: true, groupsSelectable: this.config.groupsSelectable, groupsOnly: this.config.groupsOnly, showChildDevices: this.config.showChildDevices }); } async createManagedObjectRootNode(asset) { if (asset.id) { return this.groupNodeService.createGroupNode({ mo: asset, groupsSelectable: this.config.groupsSelectable, groupsOnly: this.config.groupsOnly, showChildDevices: this.config.showChildDevices }); } const { data: mo } = await this.inventory.detail(asset); return this.groupNodeService.createGroupNode({ mo, groupsSelectable: this.config.groupsSelectable, groupsOnly: this.config.groupsOnly, showChildDevices: this.config.showChildDevices }); } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXNzZXQtc2VsZWN0b3ItYmFzZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2Fzc2V0cy1uYXZpZ2F0b3IvYXNzZXQtc2VsZWN0b3IvYXNzZXQtc2VsZWN0b3ItYmFzZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBTzdDLE1BQU0sT0FBTyxpQkFBaUI7SUF5QjVCLFlBQ1ksZ0JBQWtDLEVBQ2xDLFNBQTJCLEVBQzNCLG9CQUEwQztRQUYxQyxxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ2xDLGNBQVMsR0FBVCxTQUFTLENBQWtCO1FBQzNCLHlCQUFvQixHQUFwQixvQkFBb0IsQ0FBc0I7UUEzQnREOztXQUVHO1FBQ0gsV0FBTSxHQUF5QixFQUFFLENBQUM7UUFLbEM7O1dBRUc7UUFDSCxjQUFTLEdBQUcsS0FBSyxDQUFDO1FBQ2xCOztXQUVHO1FBQ0gsZUFBVSxHQUFHLElBQUksWUFBWSxFQUE2QixDQUFDO1FBQzNEOztXQUVHO1FBQ0gsb0JBQWUsR0FBRyxJQUFJLFlBQVksRUFBUSxDQUFDO0lBU3hDLENBQUM7SUFFSjs7T0FFRztJQUNILFFBQVEsQ0FBQyxPQUF3QjtRQUMvQixJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxJQUFJLENBQUMsQ0FBQyxPQUFPLENBQUMsS0FBSyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDM0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUM1QixDQUFDO1FBQ0QsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7O09BRUc7SUFDSCxVQUFVLENBQUMsR0FBUTtRQUNqQixJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxjQUFjLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMs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VSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVTtZQUNsQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLGdCQUFnQjtTQUMvQyxDQUFDLENBQUM7SUFDTCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBFdmVudEVtaXR0ZXIgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IElJZGVudGlmaWVkLCBJTWFuYWdlZE9iamVjdCwgSW52ZW50b3J5U2VydmljZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEdyb3VwTm9kZVNlcnZpY2UgfSBmcm9tICcuL2dyb3VwLW5vZGUuc2VydmljZSc7XG5pbXBvcnQgeyBBc3NldFNlbGVjdG9yU2VydmljZSB9IGZyb20gJy4vYXNzZXQtc2VsZWN0b3Iuc2VydmljZSc7XG5pbXBvcnQgeyBBc3NldFNlbGVjdGlvbkNoYW5nZUV2ZW50LCBBc3NldFNlbGVjdG9yT3B0aW9ucyB9IGZyb20gJy4vYXNzZXQtc2VsZWN0b3IubW9kZWwnO1xuaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBWYWxpZGF0aW9uRXJyb3JzIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuXG5leHBvcnQgY2xhc3MgQXNzZXRTZWxlY3RvckJhc2Uge1xuICAvKipcbiAgICogQ29uZmlnIG9iamVjdCBjb250YWluaW5nIGFsbCBvcHRpb25zIGZvciB0aGUgYXNzZXQgc2VsZWN0b3IuXG4gICAqL1xuICBjb25maWc6IEFzc2V0U2VsZWN0b3JPcHRpb25zID0ge307XG4gIC8qKlxuICAgKiBBbiBhcnJheSBvZiBwcmVkZWZpbmVkIG5vZGVzLlxuICAgKi9cbiAgc2VsZWN0ZWQ6IEFycmF5PFBhcnRpYWw8SU1hbmFnZWRPYmplY3Q+PiB8IElJZGVudGlmaWVkW10gfCBJSWRlbnRpZmllZDtcbiAgLyoqXG4gICAqIFRoZSBsb2FkaW5nIHN0YXRlIG9mIHRoZSBjdXJyZW50IG5vZGUuXG4gICAqL1xuICBpc0xvYWRpbmcgPSBmYWxzZTtcbiAgLyoqXG4gICAqIEVtaXQgdGhlIHNlbGVjdGVkIGFzc2V0IG9yIGFzc2V0cy5cbiAgICovXG4gIG9uU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPEFzc2V0U2VsZWN0aW9uQ2hhbmdlRXZlbnQ+KCk7XG4gIC8qKlxuICAgKiBFbWl0cyBpZiB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGFzc2V0IGlzIGNsZWFyZWQuXG4gICAqL1xuICBvbkNsZWFyU2VsZWN0ZWQgPSBuZXcgRXZlbnRFbWl0dGVyPHZvaWQ+KCk7XG5cbiAgcHJpdmF0ZSBvbkNoYW5nZTogKG1vOiBJSWRlbnRpZmllZFtdIHwgSUlkZW50aWZpZWQpID0+IHZvaWQ7XG4gIHByaXZhdGUgb25Ub3VjaGVkOiAoKSA9PiB2b2lkO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHByb3RlY3RlZCBncm91cE5vZGVTZXJ2aWNlOiBHcm91cE5vZGVTZXJ2aWNlLFxuICAgIHByb3RlY3RlZCBpbnZlbnRvcnk6IEludmVudG9yeVNlcnZpY2UsXG4gICAgcHJvdGVjdGVkIGFzc2V0U2VsZWN0b3JTZXJ2aWNlOiBBc3NldFNlbGVjdG9yU2VydmljZVxuICApIHt9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHZhbGlkYXRlKGNvbnRyb2w6IEFic3RyYWN0Q29udHJvbCk6IFZhbGlkYXRpb25FcnJvcnMge1xuICAgIGlmICh0aGlzLmNvbmZpZy5yZXF1aXJlZCAmJiAoIWNvbnRyb2wudmFsdWUgfHwgY29udHJvbC52YWx1ZS5sZW5ndGggPT09IDApKSB7XG4gICAgICByZXR1cm4geyByZXF1aXJlZDogdHJ1ZSB9O1xuICAgIH1cbiAgICByZXR1cm4gbnVsbDtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICB3cml0ZVZhbHVlKG9iajogYW55KTogdm9pZCB7XG4gICAgdGhpcy5zZWxlY3RlZCA9IHRoaXMuYXNzZXRTZWxlY3RvclNlcnZpY2Uubm9ybWFsaXplVmFsdWUob2JqLCB0aGlzLmNvbmZpZy5tb2RlbE1vZGUpO1xuICB9XG5cbiAgLyoqXG4gICAqIEBpZ25vcmVcbiAgICovXG4gIHJlZ2lzdGVyT25DaGFuZ2UoZm46IGFueSk6IHZvaWQge1xuICAgIHRoaXMub25DaGFuZ2UgPSBmbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICByZWdpc3Rlck9uVG91Y2hlZChmbjogYW55KTogdm9pZCB7XG4gICAgdGhpcy5vblRvdWNoZWQgPSBmbjtcbiAgfVxuXG4gIC8qKlxuICAgKiBAaWdub3JlXG4gICAqL1xuICBkb0JsdXIoKSB7XG4gICAgaWYgKHRoaXMub25Ub3VjaGVkKSB7XG4gICAgICB0aGlzLm9uVG91Y2hlZCgpO1xuICAgIH1cbiAgfVxuXG4gIC8qKlxuICAgKiBEZXNlbGVjdHMgYWxsIGV4cGVjdCB0aGUgZ2l2ZW4gb25lLlxuICAgKiBAcGFyYW0gc2VsZWN0ZWRNbyBUaGUgc2VsZWN0ZWQgYXNzZXQgKG9wdGlvbmFsLCBpZiBlbXB0eSAtPiBqdXN0IGRlc2VsZWN0IGFsbCkuXG4gICAqL1xuICBkZXNlbGVjdEFsbChzZWxlY3RlZE1vPzogSU1hbmFnZWRPYmplY3QpIHtcbiAgICB0aGlzLnNlbGVjdGVkID0gW107XG4gICAgaWYgKHNlbGVjdGVkTW8pIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWQgPSBbdGhpcy5hc3NldFNlbGVjdG9yU2VydmljZS5zaW1wbGlmeU1vZGVsKHNlbGVjdGVkTW8sIHRoaXMuY29uZmlnLm1vZGVsTW9kZSldO1xuICAgIH1cbiAgICB0aGlzLmVtaXRDaGFuZ2UodGhpcy5zZWxlY3RlZCwgc2VsZWN0ZWRNbywgISFzZWxlY3RlZE1vKTtcbiAgICB0aGlzLmRvQmx1cigpO1xuICB9XG5cbiAgLyoqXG4gICAqIEFkZHMgYW4gbWFuYWdlZCBvYmplY3QgdG8gdGhlIHNlbGVjdGVkIGFycmF5IGFuZCBlbWl0cyB0aGUgY2hhbmdlLlxuICAgKiBAcGFyYW0gc2VsZWN0ZWRNbyBUaGUgc2VsZWN0ZWQgYXNzZXQuXG4gICAqL1xuICBzZWxlY3Qoc2VsZWN0ZWRNbzogSU1hbmFnZWRPYmplY3QpIHtcbiAgICBpZiAoIXRoaXMuY29uZmlnLm11bHRpKSB7XG4gICAgICB0aGlzLnNlbGVjdGVkID0gW107XG4gICAgfVxuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRJbmRleE9mU2VsZWN0ZWQodGhpcy5zZWxlY3RlZCwgc2VsZWN0ZWRNbyk7XG4gICAgaWYgKGluZGV4ID09PSAtMSkge1xuICAgICAgdGhpcy5zZWxlY3RlZC5wdXNoKFxuICAgICAgICB0aGlzLmFzc2V0U2VsZWN0b3JTZXJ2aWNlLnNpbXBsaWZ5TW9kZWwoc2VsZWN0ZWRNbywgdGhpcy5jb25maWcubW9kZWxNb2RlKVxuICAgICAgKTtcbiAgICB9XG4gICAgdGhpcy5lbWl0Q2hhbmdlKHRoaXMuc2VsZWN0ZWQsIHNlbGVjdGVkTW8sIHRydWUpO1xuICAgIHRoaXMuZG9CbHVyKCk7XG4gIH1cblxuICAvKipcbiAgICogUmVtb3ZlcyBhIG1hbmFnZWQgb2JqZWN0IGZyb20gdGhlIHNlbGVjdGVkIGFycmF5IGFuZCBlbWl0cyB0aGUgY2hhbmdlLlxuICAgKiBAcGFyYW0gc2VsZWN0ZWRNbyBUaGUgc2VsZWN0ZWQgYXNzZXQuXG4gICAqL1xuICBkZXNlbGVjdChzZWxlY3RlZE1vOiBJTWFuYWdlZE9iamVjdCkge1xuICAgIGNvbnN0IGluZGV4ID0gdGhpcy5nZXRJbmRleE9mU2VsZWN0ZWQodGhpcy5zZWxlY3RlZCwgc2VsZWN0ZWRNbyk7XG4gICAgaWYgKGluZGV4ID4gLTEpIHtcbiAgICAgIHRoaXMuc2VsZWN0ZWQuc3BsaWNlKGluZGV4LCAxKTtcbiAgICB9XG4gICAgdGhpcy5lbWl0Q2hhbmdlKHRoaXMuc2VsZWN0ZWQsIHNlbGVjdGVkTW8sIGZhbHNlKTtcbiAgICB0aGlzLmRvQmx1cigpO1xuICB9XG5cbiAgLyoqXG4gICAqIFJldHVybnMgdGhlIGluZGV4IG9mIHRoZSBjdXJyZW50bHkgc2VsZWN0ZWQgaXRlbS5cbiAgICogQHBhcmFtIHNlbGVjdGVkIEFsbCBzZWxlY3RlZCBpdGVtc1xuICAgKiBAcGFyYW0gc2VsZWN0ZWRNbyBUaGUgbmV3IHNlbGVjdGVkIGl0ZW0tXG4gICAqIEByZXR1cm5zIEFuIGluZGV4LCBvciAtMSBpZiBub3QgZm91bmQuXG4gICAqL1xuICBnZXRJbmRleE9mU2VsZWN0ZWQoXG4gICAgc2VsZWN0ZWQ6IEFycmF5PFBhcnRpYWw8SUlkZW50aWZpZWQ+PiB8IFBhcnRpYWw8SUlkZW50aWZpZWQ+LFxuICAgIHNlbGVjdGVkTW86IElJZGVudGlmaWVkXG4gICkge1xuICAgIHJldHVybiBzZWxlY3RlZC5maW5kSW5kZXgobW8gPT4gbW8uaWQgPT09IHNlbGVjdGVkTW8uaWQpO1xuICB9XG5cbiAgZW1pdENoYW5nZShzZWxlY3RlZDogSUlkZW50aWZpZWQgfCBJSWRlbnRpZmllZFtdLCBpdGVtOiBJTWFuYWdlZE9iamVjdCwgaXNTZWxlY3RlZDogYm9vbGVhbikge1xuICAgIGNvbnN0IGNoYW5nZXMgPSB0aGlzLmNvbmZpZy5tdWx0aSA/IHNlbGVjdGVkIDogc2VsZWN0ZWRbMF07XG4gICAgaWYgKHRoaXMub25DaGFuZ2UpIHtcbiAgICAgIHRoaXMub25DaGFuZ2UoY2hhbmdlcyk7XG4gICAgfVxuICAgIHRoaXMub25TZWxlY3RlZC5lbWl0KHsgaXRlbXM6IGNoYW5nZXMsIGNoYW5nZTogeyBpdGVtLCBpc1NlbGVjdGVkIH0gfSk7XG4gIH1cblxuICBjcmVhdGVEZWZhdWx0Um9vdE5vZGUoKSB7XG4gICAgcmV0dXJuIHRoaXMuZ3JvdXBOb2RlU2VydmljZS5jcmVhdGVHcm91cE5vZGUoe1xuICAgICAgcm9vdDogdHJ1ZSxcbiAgICAgIGdyb3Vwc1NlbGVjdGFibGU6IHRoaXMuY29uZmlnLmdyb3Vwc1NlbGVjdGFibGUsXG4gICAgICBncm91cHNPbmx5OiB0aGlzLmNvbmZpZy5ncm91cHNPbmx5LFxuICAgICAgc2hvd0NoaWxkRGV2aWNlczogdGhpcy5jb25maWcuc2hvd0NoaWxkRGV2aWNlc1xuICAgIH0pO1xuICB9XG4gIGFzeW5jIGNyZWF0ZU1hbmFnZWRPYmplY3RSb290Tm9kZShhc3NldDogSUlkZW50aWZpZWQpIHtcbiAgICBpZiAoKGFzc2V0IGFzIElJZGVudGlmaWVkKS5pZCkge1xuICAgICAgcmV0dXJuIHRoaXMuZ3JvdXBOb2RlU2VydmljZS5jcmVhdGVHcm91cE5vZGUoe1xuICAgICAgICBtbzogYXNzZXQgYXMgSU1hbmFnZWRPYmplY3QsXG4gICAgICAgIGdyb3Vwc1NlbGVjdGFibGU6IHRoaXMuY29uZmlnLmdyb3Vwc1NlbGVjdGFibGUsXG4gICAgICAgIGdyb3Vwc09ubHk6IHRoaXMuY29uZmlnLmdyb3Vwc09ubHksXG4gICAgICAgIHNob3dDaGlsZERldmljZXM6IHRoaXMuY29uZmlnLnNob3dDaGlsZERldmljZXNcbiAgICAgIH0pO1xuICAgIH1cbiAgICBjb25zdCB7IGRhdGE6IG1vIH0gPSBhd2FpdCB0aGlzLmludmVudG9yeS5kZXRhaWwoYXNzZXQpO1xuICAgIHJldHVybiB0aGlzLmdyb3VwTm9kZVNlcnZpY2UuY3JlYXRlR3JvdXBOb2RlKHtcbiAgICAgIG1vLFxuICAgICAgZ3JvdXBzU2VsZWN0YWJsZTogdGhpcy5jb25maWcuZ3JvdXBzU2VsZWN0YWJsZSxcbiAgICAgIGdyb3Vwc09ubHk6IHRoaXMuY29uZmlnLmdyb3Vwc09ubHksXG4gICAgICBzaG93Q2hpbGREZXZpY2VzOiB0aGlzLmNvbmZpZy5zaG93Q2hpbGREZXZpY2VzXG4gICAgfSk7XG4gIH1cbn1cbiJdfQ==