UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

80 lines 11.5 kB
import { Injectable } from '@angular/core'; import { InventoryService } from '@c8y/client'; import { FormControl, FormGroup, Validators } from '@angular/forms'; import { ValidationPattern } from '@c8y/ngx-components'; import * as i0 from "@angular/core"; import * as i1 from "@c8y/client"; const defaultFilters = { query: "(type eq 'c8y_JsonSchema') and (appliesTo.TENANTS eq true)", pageSize: 1000, withTotalPages: true }; export class CustomPropertiesService { constructor(inventoryService) { this.inventoryService = inventoryService; } async getFormAndFieldList() { const schema = await this.getCustomProperties(); const formGroup = this.buildFormGroup(schema); const fields = this.buildFieldList(formGroup, schema); return { form: formGroup, fields }; } async getCustomProperties() { let customFieldsSchema = {}; const customProperties = await this.inventoryService.list(defaultFilters); customProperties.data.forEach(item => { const fieldSchema = item['c8y_JsonSchema'].properties; customFieldsSchema = { ...customFieldsSchema, ...fieldSchema }; }); return customFieldsSchema; } buildFormGroup(schema) { const fg = new FormGroup({}); for (const [key, value] of Object.entries(schema)) { const control = new FormControl(value.default, []); this.applyValidators(control, value); fg.addControl(key, control); } return fg; } applyValidators(control, props) { const validatorsMap = { required: Validators.required, minimum: Validators.min(props.minimum), maximum: Validators.max(props.maximum), minLength: Validators.minLength(props.minLength), maxLength: Validators.maxLength(props.maxLength), pattern: Validators.pattern(props.pattern) }; Object.entries(validatorsMap).forEach(([key, validator]) => { if (props[key] !== undefined) { control.addValidators(validator); } }); if (props.type === 'integer') { control.addValidators(Validators.pattern(ValidationPattern.rules.integer.pattern)); } } buildFieldList(form, schema) { const fieldList = []; Object.entries(schema).forEach(([key, value]) => { fieldList.push({ id: key, label: value.title, type: value.type, format: value.format, formControlReference: form.get(key) }); }); return fieldList; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CustomPropertiesService, deps: [{ token: i1.InventoryService }], target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CustomPropertiesService, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CustomPropertiesService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: () => [{ type: i1.InventoryService }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLXByb3BlcnRpZXMuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RlbmFudHMvY3VzdG9tLXByb3BlcnRpZXMvY3VzdG9tLXByb3BlcnRpZXMuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUMvQyxPQUFPLEVBQW1CLFdBQVcsRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFFckYsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0scUJBQXFCLENBQUM7OztBQWF4RCxNQUFNLGNBQWMsR0FBRztJQUNyQixLQUFLLEVBQUUsNERBQTREO0lBQ25FLFFBQVEsRUFBRSxJQUFJO0lBQ2QsY0FBYyxFQUFFLElBQUk7Q0FDckIsQ0FBQztBQUtGLE1BQU0sT0FBTyx1QkFBdUI7SUFDbEMsWUFBb0IsZ0JBQWtDO1FBQWxDLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7SUFBRyxDQUFDO0lBRTFELEtBQUssQ0FBQyxtQkFBbUI7UUFDdkIsTUFBTSxNQUFNLEdBQUcsTUFBTSxJQUFJLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztRQUNoRCxNQUFNLFNBQVMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzlDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsU0FBUyxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQ3RELE9BQU8sRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxDQUFDO0lBQ3JDLENBQUM7SUFFTyxLQUFLLENBQUMsbUJBQW1CO1FBQy9CLElBQUksa0JBQWtCLEdBQW1CLEVBQUUsQ0FBQztRQUM1QyxNQUFNLGdCQUFnQixHQUFHLE1BQU0sSUFBSSxDQUFDLGdC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OytHQWxFVSx1QkFBdUI7bUhBQXZCLHVCQUF1QixjQUZ0QixNQUFNOzs0RkFFUCx1QkFBdUI7a0JBSG5DLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgSW52ZW50b3J5U2VydmljZSB9IGZyb20gJ0BjOHkvY2xpZW50JztcbmltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgRm9ybUNvbnRyb2wsIEZvcm1Hcm91cCwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IEpTT05TY2hlbWE3LCBKU09OU2NoZW1hN1R5cGVOYW1lIH0gZnJvbSAnanNvbi1zY2hlbWEnO1xuaW1wb3J0IHsgVmFsaWRhdGlvblBhdHRlcm4gfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcblxudHlwZSBQcm9wZXJ0aWVzVHlwZSA9IHsgW2tleTogc3RyaW5nXTogSlNPTlNjaGVtYTcgfTtcblxuLy8gTW9kZWwgZm9yIGluZGl2aWR1YWwgdGVuYW50IGN1c3RvbSBwcm9wZXJ0eSBmaWVsZFxuZXhwb3J0IGludGVyZmFjZSBUZW5hbnRDdXN0b21Qcm9wZXJ0eUZpZWxkIHtcbiAgaWQ6IHN0cmluZztcbiAgbGFiZWw6IHN0cmluZztcbiAgdHlwZTogSlNPTlNjaGVtYTdUeXBlTmFtZSB8IEpTT05TY2hlbWE3VHlwZU5hbWVbXTtcbiAgZm9ybWF0PzogJ2RhdGV0aW1lJyB8IHN0cmluZztcbiAgZm9ybUNvbnRyb2xSZWZlcmVuY2U6IEFic3RyYWN0Q29udHJvbDtcbn1cblxuY29uc3QgZGVmYXVsdEZpbHRlcnMgPSB7XG4gIHF1ZXJ5OiBcIih0eXBlIGVxICdjOHlfSnNvblNjaGVtYScpIGFuZCAoYXBwbGllc1RvLlRFTkFOVFMgZXEgdHJ1ZSlcIixcbiAgcGFnZVNpemU6IDEwMDAsXG4gIHdpdGhUb3RhbFBhZ2VzOiB0cnVlXG59O1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBDdXN0b21Qcm9wZXJ0aWVzU2VydmljZSB7XG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgaW52ZW50b3J5U2VydmljZTogSW52ZW50b3J5U2VydmljZSkge31cblxuICBhc3luYyBnZXRGb3JtQW5kRmllbGRMaXN0KCk6IFByb21pc2U8eyBmb3JtOiBGb3JtR3JvdXA7IGZpZWxkczogVGVuYW50Q3VzdG9tUHJvcGVydHlGaWVsZFtdIH0+IHtcbiAgICBjb25zdCBzY2hlbWEgPSBhd2FpdCB0aGlzLmdldEN1c3RvbVByb3BlcnRpZXMoKTtcbiAgICBjb25zdCBmb3JtR3JvdXAgPSB0aGlzLmJ1aWxkRm9ybUdyb3VwKHNjaGVtYSk7XG4gICAgY29uc3QgZmllbGRzID0gdGhpcy5idWlsZEZpZWxkTGlzdChmb3JtR3JvdXAsIHNjaGVtYSk7XG4gICAgcmV0dXJuIHsgZm9ybTogZm9ybUdyb3VwLCBmaWVsZHMgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0Q3VzdG9tUHJvcGVydGllcygpOiBQcm9taXNlPFByb3BlcnRpZXNUeXBlPiB7XG4gICAgbGV0IGN1c3RvbUZpZWxkc1NjaGVtYTogUHJvcGVydGllc1R5cGUgPSB7fTtcbiAgICBjb25zdCBjdXN0b21Qcm9wZXJ0aWVzID0gYXdhaXQgdGhpcy5pbnZlbnRvcnlTZXJ2aWNlLmxpc3QoZGVmYXVsdEZpbHRlcnMpO1xuXG4gICAgY3VzdG9tUHJvcGVydGllcy5kYXRhLmZvckVhY2goaXRlbSA9PiB7XG4gICAgICBjb25zdCBmaWVsZFNjaGVtYTogUHJvcGVydGllc1R5cGUgPSBpdGVtWydjOHlfSnNvblNjaGVtYSddLnByb3BlcnRpZXM7XG4gICAgICBjdXN0b21GaWVsZHNTY2hlbWEgPSB7IC4uLmN1c3RvbUZpZWxkc1NjaGVtYSwgLi4uKGZpZWxkU2NoZW1hIGFzIG9iamVjdCkgfTtcbiAgICB9KTtcbiAgICByZXR1cm4gY3VzdG9tRmllbGRzU2NoZW1hO1xuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEZvcm1Hcm91cChzY2hlbWE6IFByb3BlcnRpZXNUeXBlKTogRm9ybUdyb3VwIHtcbiAgICBjb25zdCBmZyA9IG5ldyBGb3JtR3JvdXAoe30pO1xuXG4gICAgZm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoc2NoZW1hKSkge1xuICAgICAgY29uc3QgY29udHJvbCA9IG5ldyBGb3JtQ29udHJvbCh2YWx1ZS5kZWZhdWx0LCBbXSk7XG4gICAgICB0aGlzLmFwcGx5VmFsaWRhdG9ycyhjb250cm9sLCB2YWx1ZSk7XG4gICAgICBmZy5hZGRDb250cm9sKGtleSwgY29udHJvbCk7XG4gICAgfVxuICAgIHJldHVybiBmZztcbiAgfVxuXG4gIHByaXZhdGUgYXBwbHlWYWxpZGF0b3JzKGNvbnRyb2w6IEZvcm1Db250cm9sLCBwcm9wczogSlNPTlNjaGVtYTcpOiB2b2lkIHtcbiAgICBjb25zdCB2YWxpZGF0b3JzTWFwID0ge1xuICAgICAgcmVxdWlyZWQ6IFZhbGlkYXRvcnMucmVxdWlyZWQsXG4gICAgICBtaW5pbXVtOiBWYWxpZGF0b3JzLm1pbihwcm9wcy5taW5pbXVtKSxcbiAgICAgIG1heGltdW06IFZhbGlkYXRvcnMubWF4KHByb3BzLm1heGltdW0pLFxuICAgICAgbWluTGVuZ3RoOiBWYWxpZGF0b3JzLm1pbkxlbmd0aChwcm9wcy5taW5MZW5ndGgpLFxuICAgICAgbWF4TGVuZ3RoOiBWYWxpZGF0b3JzLm1heExlbmd0aChwcm9wcy5tYXhMZW5ndGgpLFxuICAgICAgcGF0dGVybjogVmFsaWRhdG9ycy5wYXR0ZXJuKHByb3BzLnBhdHRlcm4pXG4gICAgfTtcblxuICAgIE9iamVjdC5lbnRyaWVzKHZhbGlkYXRvcnNNYXApLmZvckVhY2goKFtrZXksIHZhbGlkYXRvcl0pID0+IHtcbiAgICAgIGlmIChwcm9wc1trZXkgYXMga2V5b2YgSlNPTlNjaGVtYTddICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgY29udHJvbC5hZGRWYWxpZGF0b3JzKHZhbGlkYXRvcik7XG4gICAgICB9XG4gICAgfSk7XG5cbiAgICBpZiAocHJvcHMudHlwZSA9PT0gJ2ludGVnZXInKSB7XG4gICAgICBjb250cm9sLmFkZFZhbGlkYXRvcnMoVmFsaWRhdG9ycy5wYXR0ZXJuKFZhbGlkYXRpb25QYXR0ZXJuLnJ1bGVzLmludGVnZXIucGF0dGVybikpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYnVpbGRGaWVsZExpc3QoZm9ybTogRm9ybUdyb3VwLCBzY2hlbWE6IFByb3BlcnRpZXNUeXBlKTogVGVuYW50Q3VzdG9tUHJvcGVydHlGaWVsZFtdIHtcbiAgICBjb25zdCBmaWVsZExpc3Q6IFRlbmFudEN1c3RvbVByb3BlcnR5RmllbGRbXSA9IFtdO1xuICAgIE9iamVjdC5lbnRyaWVzKHNjaGVtYSkuZm9yRWFjaCgoW2tleSwgdmFsdWVdKSA9PiB7XG4gICAgICBmaWVsZExpc3QucHVzaCh7XG4gICAgICAgIGlkOiBrZXksXG4gICAgICAgIGxhYmVsOiB2YWx1ZS50aXRsZSxcbiAgICAgICAgdHlwZTogdmFsdWUudHlwZSxcbiAgICAgICAgZm9ybWF0OiB2YWx1ZS5mb3JtYXQsXG4gICAgICAgIGZvcm1Db250cm9sUmVmZXJlbmNlOiBmb3JtLmdldChrZXkpIGFzIEZvcm1Db250cm9sXG4gICAgICB9KTtcbiAgICB9KTtcblxuICAgIHJldHVybiBmaWVsZExpc3Q7XG4gIH1cbn1cbiJdfQ==