UNPKG

@c8y/ngx-components

Version:

Angular modules for Cumulocity IoT applications

136 lines 17.4 kB
import { Injectable } from '@angular/core'; import { FormlyJsonschema } from '@ngx-formly/core/json-schema'; import { omit, has, get } from 'lodash-es'; import * as i0 from "@angular/core"; export class C8yJSONSchema extends FormlyJsonschema { toFieldConfig(schema, options) { const config = super.toFieldConfig(schema, this.c8yOptions((options || {}).map)); return config; } c8yOptions(map) { return { map(mappedField, mapSource) { let result = mappedField; if (has(mapSource, 'order')) { result = { ...result, order: get(mapSource, 'order') }; } if (mapSource.type === 'number') { // TODO: remove validators and parser overrides when ngx-formly issue is fixed https://github.com/ngx-formly/ngx-formly/issues/3757 // validator override is needed so empty value can be saved if field is not required result.validators.type.expression = ({ value }) => { if (value == null) { return true; } return typeof value === 'number'; }; // parsers override is needed to make it possible to type e.g. '2e3' character by character result.parsers = [val => val]; } /** `const` type is represented as hidden input */ if (mapSource.const) { result = { ...result, defaultValue: mapSource.const, type: 'input', props: { ...result.props, type: 'hidden' } }; } /** `writeOnly` field represented as password input */ if (mapSource.writeOnly) { result = { ...result, props: { ...(result.props || {}), attributes: { ...result.props?.attributes, type: 'password', autocomplete: 'off' } } }; } /** `examples` values used as placeholder */ if (mapSource.examples) { result = { ...result, props: { ...(result.props || {}), placeholder: mapSource.examples.join(', ') } }; } /** `enum` field represented as radio button group */ if (mapSource.enum) { result = { ...result, type: 'radio' }; } /** fields with `contentMediaType` or `contentEncoding` are represented as file inputs */ if (mapSource.contentMediaType || mapSource.contentEncoding) { result = { ...result, type: 'file', props: { ...(result.props || {}), accept: mapSource.contentMediaType, maxAllowedFiles: 1, contentEncoding: mapSource.contentEncoding } }; // TODO: Remove this line when base64 encoding is done by file.type.component // and control's value would pass 'string' type validator. if (mapSource.contentEncoding === 'base64') { result.validators = omit(result.validators, ['type']); } } /** file extension validation for fields with `allowedFileTypes` */ if (mapSource.allowedFileTypes) { result = { ...result, type: 'file', props: { ...(result.props || {}), ...(mapSource.allowedFileTypes && { accept: mapSource.allowedFileTypes.join(',') }) } }; } /** max size file validation` */ if (mapSource.maxSize) { result = { ...result, type: 'file', props: { ...(result.props || {}), maxFileSizeInMegaBytes: mapSource.maxSize } }; } /** Provides a way to use templateOptions in JSONSchema forms */ if (mapSource.templateOptions) { result = { ...result, props: { ...mapSource.templateOptions, ...result.props } }; } return map ? map(result, mapSource) : result; } }; } static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: C8yJSONSchema, deps: null, target: i0.ɵɵFactoryTarget.Injectable }); } static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: C8yJSONSchema, providedIn: 'root' }); } } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: C8yJSONSchema, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYzh5LWpzb24tc2NoZW1hLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9jb3JlL2R5bmFtaWMtZm9ybXMvanNvbi1zY2hlbWEvYzh5LWpzb24tc2NoZW1hLnNlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUUzQyxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsSUFBSSxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7O0FBUzNDLE1BQU0sT0FBTyxhQUFjLFNBQVEsZ0JBQWdCO0lBQ2pELGFBQWEsQ0FBQyxNQUFtQixFQUFFLE9BQWE7UUFDOUMsTUFBTSxNQUFNLEdBQXNCLEtBQUssQ0FBQyxhQUFhLENBQ25ELE1BQU0sRUFDTixJQUFJLENBQUMsVUFBVSxDQUFDLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUNyQyxDQUFDO1FBQ0YsT0FBTyxNQUFNLENBQUM7SUFDaEIsQ0FBQztJQUVPLFVBQVUsQ0FDaEIsR0FBd0Y7UUFFeEYsT0FBTztZQUNMLEdBQUcsQ0FDRCxXQUFvQyxFQUNwQyxTQUdDO2dCQUVELElBQUksTUFBTSxHQUE0QixXQUFXLENBQUM7Z0JBRWxELElBQUksR0FBRyxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDO29CQUM1QixNQUFNLEdBQUc7d0JBQ1AsR0FBRyxNQUFNO3dCQUNULEtBQUssRUFBRSxHQUFHLENBQUMsU0FBUyxFQUFFLE9BQU8sQ0FBQztxQkFDL0IsQ0FBQztnQkFDSixDQUFDO2dCQUVELElBQUksU0FBUyxDQUFDLElBQUksS0FBSyxRQUFRLEVBQUUsQ0FBQztvQkFDaEMsbUlBQW1JO29CQUNuSSxvRkFBb0Y7b0JBQ3BGLE1BQU0sQ0FBQyxVQUFVLENBQUMsSUFBSSxD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aEMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDOzZCQUM3QyxDQUFDO3lCQUNIO3FCQUNGLENBQUM7Z0JBQ0osQ0FBQztnQkFDRCxnQ0FBZ0M7Z0JBQ2hDLElBQUssU0FBaUIsQ0FBQyxPQUFPLEVBQUUsQ0FBQztvQkFDL0IsTUFBTSxHQUFHO3dCQUNQLEdBQUcsTUFBTTt3QkFDVCxJQUFJLEVBQUUsTUFBTTt3QkFDWixLQUFLLEVBQUU7NEJBQ0wsR0FBRyxDQUFDLE1BQU0sQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDOzRCQUN2QixzQkFBc0IsRUFBRyxTQUFpQixDQUFDLE9BQU87eUJBQ25EO3FCQUNGLENBQUM7Z0JBQ0osQ0FBQztnQkFFRCxnRUFBZ0U7Z0JBQ2hFLElBQUksU0FBUyxDQUFDLGVBQWUsRUFBRSxDQUFDO29CQUM5QixNQUFNLEdBQUc7d0JBQ1AsR0FBRyxNQUFNO3dCQUNULEtBQUssRUFBRTs0QkFDTCxHQUFHLFNBQVMsQ0FBQyxlQUFlOzRCQUM1QixHQUFHLE1BQU0sQ0FBQyxLQUFLO3lCQUNoQjtxQkFDRixDQUFDO2dCQUNKLENBQUM7Z0JBRUQsT0FBTyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQztZQUMvQyxDQUFDO1NBQ0YsQ0FBQztJQUNKLENBQUM7K0dBaEpVLGFBQWE7bUhBQWIsYUFBYSxjQUZaLE1BQU07OzRGQUVQLGFBQWE7a0JBSHpCLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgRm9ybWx5RmllbGRDb25maWcsIEZvcm1seVRlbXBsYXRlT3B0aW9ucyB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUnO1xuaW1wb3J0IHsgRm9ybWx5SnNvbnNjaGVtYSB9IGZyb20gJ0BuZ3gtZm9ybWx5L2NvcmUvanNvbi1zY2hlbWEnO1xuaW1wb3J0IHsgSlNPTlNjaGVtYTcgfSBmcm9tICdqc29uLXNjaGVtYSc7XG5pbXBvcnQgeyBvbWl0LCBoYXMsIGdldCB9IGZyb20gJ2xvZGFzaC1lcyc7XG5cbmludGVyZmFjZSBDdXN0b21Gb3JtbHlGaWVsZENvbmZpZyBleHRlbmRzIEZvcm1seUZpZWxkQ29uZmlnIHtcbiAgb3JkZXI/OiBudW1iZXI7XG59XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEM4eUpTT05TY2hlbWEgZXh0ZW5kcyBGb3JtbHlKc29uc2NoZW1hIHtcbiAgdG9GaWVsZENvbmZpZyhzY2hlbWE6IEpTT05TY2hlbWE3LCBvcHRpb25zPzogYW55KTogRm9ybWx5RmllbGRDb25maWcge1xuICAgIGNvbnN0IGNvbmZpZzogRm9ybWx5RmllbGRDb25maWcgPSBzdXBlci50b0ZpZWxkQ29uZmlnKFxuICAgICAgc2NoZW1hLFxuICAgICAgdGhpcy5jOHlPcHRpb25zKChvcHRpb25zIHx8IHt9KS5tYXApXG4gICAgKTtcbiAgICByZXR1cm4gY29uZmlnO1xuICB9XG5cbiAgcHJpdmF0ZSBjOHlPcHRpb25zKFxuICAgIG1hcDogKG1hcHBlZEZpZWxkOiBDdXN0b21Gb3JtbHlGaWVsZENvbmZpZywgbWFwU291cmNlOiBKU09OU2NoZW1hNykgPT4gRm9ybWx5RmllbGRDb25maWdcbiAgKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG1hcChcbiAgICAgICAgbWFwcGVkRmllbGQ6IEN1c3RvbUZvcm1seUZpZWxkQ29uZmlnLFxuICAgICAgICBtYXBTb3VyY2U6IEpTT05TY2hlbWE3ICYge1xuICAgICAgICAgIGFsbG93ZWRGaWxlVHlwZXM6IHN0cmluZ1tdO1xuICAgICAgICAgIHRlbXBsYXRlT3B0aW9uczogRm9ybWx5VGVtcGxhdGVPcHRpb25zO1xuICAgICAgICB9XG4gICAgICApIHtcbiAgICAgICAgbGV0IHJlc3VsdDogQ3VzdG9tRm9ybWx5RmllbGRDb25maWcgPSBtYXBwZWRGaWVsZDtcblxuICAgICAgICBpZiAoaGFzKG1hcFNvdXJjZSwgJ29yZGVyJykpIHtcbiAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAgICBvcmRlcjogZ2V0KG1hcFNvdXJjZSwgJ29yZGVyJylcbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG1hcFNvdXJjZS50eXBlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgIC8vIFRPRE86IHJlbW92ZSB2YWxpZGF0b3JzIGFuZCBwYXJzZXIgb3ZlcnJpZGVzIHdoZW4gbmd4LWZvcm1seSBpc3N1ZSBpcyBmaXhlZCBodHRwczovL2dpdGh1Yi5jb20vbmd4LWZvcm1seS9uZ3gtZm9ybWx5L2lzc3Vlcy8zNzU3XG4gICAgICAgICAgLy8gdmFsaWRhdG9yIG92ZXJyaWRlIGlzIG5lZWRlZCBzbyBlbXB0eSB2YWx1ZSBjYW4gYmUgc2F2ZWQgaWYgZmllbGQgaXMgbm90IHJlcXVpcmVkXG4gICAgICAgICAgcmVzdWx0LnZhbGlkYXRvcnMudHlwZS5leHByZXNzaW9uID0gKHsgdmFsdWUgfSkgPT4ge1xuICAgICAgICAgICAgaWYgKHZhbHVlID09IG51bGwpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm4gdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJztcbiAgICAgICAgICB9O1xuICAgICAgICAgIC8vIHBhcnNlcnMgb3ZlcnJpZGUgaXMgbmVlZGVkIHRvIG1ha2UgaXQgcG9zc2libGUgdG8gdHlwZSBlLmcuICcyZTMnIGNoYXJhY3RlciBieSBjaGFyYWN0ZXJcbiAgICAgICAgICByZXN1bHQucGFyc2VycyA9IFt2YWwgPT4gdmFsXTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKiBgY29uc3RgIHR5cGUgaXMgcmVwcmVzZW50ZWQgYXMgaGlkZGVuIGlucHV0ICovXG4gICAgICAgIGlmIChtYXBTb3VyY2UuY29uc3QpIHtcbiAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAgICBkZWZhdWx0VmFsdWU6IG1hcFNvdXJjZS5jb25zdCxcbiAgICAgICAgICAgIHR5cGU6ICdpbnB1dCcsXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAuLi5yZXN1bHQucHJvcHMsXG4gICAgICAgICAgICAgIHR5cGU6ICdoaWRkZW4nXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKiBgd3JpdGVPbmx5YCBmaWVsZCByZXByZXNlbnRlZCBhcyBwYXNzd29yZCBpbnB1dCAqL1xuICAgICAgICBpZiAobWFwU291cmNlLndyaXRlT25seSkge1xuICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgIC4uLihyZXN1bHQucHJvcHMgfHwge30pLFxuICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7IC4uLnJlc3VsdC5wcm9wcz8uYXR0cmlidXRlcywgdHlwZTogJ3Bhc3N3b3JkJywgYXV0b2NvbXBsZXRlOiAnb2ZmJyB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8qKiBgZXhhbXBsZXNgIHZhbHVlcyB1c2VkIGFzIHBsYWNlaG9sZGVyICovXG4gICAgICAgIGlmIChtYXBTb3VyY2UuZXhhbXBsZXMpIHtcbiAgICAgICAgICByZXN1bHQgPSB7XG4gICAgICAgICAgICAuLi5yZXN1bHQsXG4gICAgICAgICAgICBwcm9wczoge1xuICAgICAgICAgICAgICAuLi4ocmVzdWx0LnByb3BzIHx8IHt9KSxcbiAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6IChtYXBTb3VyY2UuZXhhbXBsZXMgYXMgc3RyaW5nW10pLmpvaW4oJywgJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG5cbiAgICAgICAgLyoqIGBlbnVtYCBmaWVsZCByZXByZXNlbnRlZCBhcyByYWRpbyBidXR0b24gZ3JvdXAgKi9cbiAgICAgICAgaWYgKG1hcFNvdXJjZS5lbnVtKSB7XG4gICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgLi4ucmVzdWx0LFxuICAgICAgICAgICAgdHlwZTogJ3JhZGlvJ1xuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvKiogZmllbGRzIHdpdGggYGNvbnRlbnRNZWRpYVR5cGVgIG9yIGBjb250ZW50RW5jb2RpbmdgIGFyZSByZXByZXNlbnRlZCBhcyBmaWxlIGlucHV0cyAqL1xuICAgICAgICBpZiAobWFwU291cmNlLmNvbnRlbnRNZWRpYVR5cGUgfHwgbWFwU291cmNlLmNvbnRlbnRFbmNvZGluZykge1xuICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICAgIHR5cGU6ICdmaWxlJyxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgIC4uLihyZXN1bHQucHJvcHMgfHwge30pLFxuICAgICAgICAgICAgICBhY2NlcHQ6IG1hcFNvdXJjZS5jb250ZW50TWVkaWFUeXBlLFxuICAgICAgICAgICAgICBtYXhBbGxvd2VkRmlsZXM6IDEsXG4gICAgICAgICAgICAgIGNvbnRlbnRFbmNvZGluZzogbWFwU291cmNlLmNvbnRlbnRFbmNvZGluZ1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG5cbiAgICAgICAgICAvLyBUT0RPOiBSZW1vdmUgdGhpcyBsaW5lIHdoZW4gYmFzZTY0IGVuY29kaW5nIGlzIGRvbmUgYnkgZmlsZS50eXBlLmNvbXBvbmVudFxuICAgICAgICAgIC8vIGFuZCBjb250cm9sJ3MgdmFsdWUgd291bGQgcGFzcyAnc3RyaW5nJyB0eXBlIHZhbGlkYXRvci5cbiAgICAgICAgICBpZiAobWFwU291cmNlLmNvbnRlbnRFbmNvZGluZyA9PT0gJ2Jhc2U2NCcpIHtcbiAgICAgICAgICAgIHJlc3VsdC52YWxpZGF0b3JzID0gb21pdChyZXN1bHQudmFsaWRhdG9ycywgWyd0eXBlJ10pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8qKiBmaWxlIGV4dGVuc2lvbiB2YWxpZGF0aW9uIGZvciBmaWVsZHMgd2l0aCBgYWxsb3dlZEZpbGVUeXBlc2AgKi9cbiAgICAgICAgaWYgKChtYXBTb3VyY2UgYXMgYW55KS5hbGxvd2VkRmlsZVR5cGVzKSB7XG4gICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgLi4ucmVzdWx0LFxuICAgICAgICAgICAgdHlwZTogJ2ZpbGUnLFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgLi4uKHJlc3VsdC5wcm9wcyB8fCB7fSksXG4gICAgICAgICAgICAgIC4uLihtYXBTb3VyY2UuYWxsb3dlZEZpbGVUeXBlcyAmJiB7XG4gICAgICAgICAgICAgICAgYWNjZXB0OiBtYXBTb3VyY2UuYWxsb3dlZEZpbGVUeXBlcy5qb2luKCcsJylcbiAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9O1xuICAgICAgICB9XG4gICAgICAgIC8qKiBtYXggc2l6ZSBmaWxlIHZhbGlkYXRpb25gICovXG4gICAgICAgIGlmICgobWFwU291cmNlIGFzIGFueSkubWF4U2l6ZSkge1xuICAgICAgICAgIHJlc3VsdCA9IHtcbiAgICAgICAgICAgIC4uLnJlc3VsdCxcbiAgICAgICAgICAgIHR5cGU6ICdmaWxlJyxcbiAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgIC4uLihyZXN1bHQucHJvcHMgfHwge30pLFxuICAgICAgICAgICAgICBtYXhGaWxlU2l6ZUluTWVnYUJ5dGVzOiAobWFwU291cmNlIGFzIGFueSkubWF4U2l6ZVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICAvKiogUHJvdmlkZXMgYSB3YXkgdG8gdXNlIHRlbXBsYXRlT3B0aW9ucyBpbiBKU09OU2NoZW1hIGZvcm1zICovXG4gICAgICAgIGlmIChtYXBTb3VyY2UudGVtcGxhdGVPcHRpb25zKSB7XG4gICAgICAgICAgcmVzdWx0ID0ge1xuICAgICAgICAgICAgLi4ucmVzdWx0LFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgLi4ubWFwU291cmNlLnRlbXBsYXRlT3B0aW9ucyxcbiAgICAgICAgICAgICAgLi4ucmVzdWx0LnByb3BzXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBtYXAgPyBtYXAocmVzdWx0LCBtYXBTb3VyY2UpIDogcmVzdWx0O1xuICAgICAgfVxuICAgIH07XG4gIH1cbn1cbiJdfQ==