@c8y/ngx-components
Version:
Angular modules for Cumulocity IoT applications
99 lines • 16.1 kB
JavaScript
import { gettext } from '@c8y/ngx-components';
import { filter, Subject, takeUntil, tap } from 'rxjs';
export class BaseObjectMapping {
constructor(config) {
this.destroy$ = new Subject();
if (config.formlyFieldConfig) {
config.formlyFieldConfig.expressions = {
hide: field => {
return !field.parent.get(`has${config.formlyFieldConfig.key}`).formControl.getRawValue();
}
};
config.formlyFieldConfig.hooks = {
onInit: field => {
field.parent
.get(`has${config.formlyFieldConfig.key}`)
.formControl.patchValue(!!field.parent.model[`${config.formlyFieldConfig.key}`]);
field.options.fieldChanges
.pipe(filter((changes) => {
return (changes.type === 'valueChanges' && changes.field === field.parent.fieldGroup[0]);
}), tap((changes) => {
if (changes.value === 'undefined') {
field.parent
.get(`has${config.formlyFieldConfig.key}`)
.formControl.patchValue(!!field.parent.model[`${config.formlyFieldConfig.key}`]);
const formField = field.parent.get(config.formlyFieldConfig.key).formControl;
if (formField) {
formField.markAsPristine();
formField.markAsUntouched();
}
}
}), takeUntil(this.destroy$))
.subscribe();
},
onDestroy: () => {
this.destroy$.next();
this.destroy$.complete();
}
};
}
config.buttonType = config.buttonType || 'switch';
const buttonConfig = config.buttonType !== 'none'
? {
className: 'list-group-item',
key: `has${config.formlyFieldConfig ? config.formlyFieldConfig.key : 'Switch'}`,
type: config.buttonType,
props: {
label: gettext(config.label),
icon: config.icon,
description: config.tooltip,
switchMode: config.buttonType === 'switch'
},
expressions: {
'props.disabled': config.disabled || (() => false)
}
}
: undefined;
if (config.formlyFieldConfig) {
config.formlyFieldConfig.expressions = {
hide: field => {
return !field.parent.get(`has${config.formlyFieldConfig.key}`).formControl.getRawValue();
}
};
config.formlyFieldConfig.hooks = {
onInit: field => {
field.parent
.get(`has${config.formlyFieldConfig.key}`)
.formControl.patchValue(!!field.parent.model[`${config.formlyFieldConfig.key}`]);
field.options.fieldChanges
.pipe(filter((changes, _index) => {
return (changes.type === 'valueChanges' && changes.field === field.parent.fieldGroup[0]);
}), tap(changes => {
if (changes.value === 'undefined') {
field.parent
.get(`has${config.formlyFieldConfig.key}`)
.formControl.patchValue(!!field.parent.model[`${config.formlyFieldConfig.key}`]);
const formField = field.parent.get(config.formlyFieldConfig.key).formControl;
if (formField) {
formField.markAsPristine();
formField.markAsUntouched();
}
}
}), takeUntil(this.destroy$))
.subscribe();
},
onDestroy: () => {
this.destroy$.next();
this.destroy$.complete();
}
};
}
this.formlyFieldCfg = {
fieldGroup: [buttonConfig, config.formlyFieldConfig]
};
}
getFormlyFieldConfig() {
return this.formlyFieldCfg;
}
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZS1tYXBwaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vZGV2aWNlLXByb3RvY29sLW9iamVjdC1tYXBwaW5ncy9kZWZhdWx0LW9iamVjdC1tYXBwaW5nLXR5cGVzL2Jhc2UtbWFwcGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFOUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUl2RCxNQUFNLE9BQWdCLGlCQUFpQjtJQUlyQyxZQUFZLE1BQXFCO1FBRnpCLGFBQVEsR0FBa0IsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUc5QyxJQUFJLE1BQU0sQ0FBQyxpQkFBaUIsRUFBRSxDQUFDO1lBQzdCLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxXQUFXLEdBQUc7Z0JBQ3JDLElBQUksRUFBRSxLQUFLLENBQUMsRUFBRTtvQkFDWixPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsTUFBTSxNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxXQUFXLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQzNGLENBQUM7YUFDRixDQUFDO1lBQ0YsTUFBTSxDQUFDLGlCQUFpQixDQUFDLEtBQUssR0FBRztnQkFDL0IsTUFBTSxFQUFFLEtBQUssQ0FBQyxFQUFFO29CQUNkLEtBQUssQ0FBQyxNQUFNO3lCQUNULEdBQUcsQ0FBQyxNQUFNLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxHQUFHLEVBQUUsQ0FBQzt5QkFDekMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsR0FBRyxNQUFNLENBQUMsaUJBQWlCLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO29CQUVuRixLQUFLLENB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RSxDQUFDOzRCQUM5QixDQUFDO3dCQUNILENBQUM7b0JBQ0gsQ0FBQyxDQUFDLEVBQ0YsU0FBUyxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FDekI7eUJBQ0EsU0FBUyxFQUFFLENBQUM7Z0JBQ2pCLENBQUM7Z0JBQ0QsU0FBUyxFQUFFLEdBQUcsRUFBRTtvQkFDZCxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDO29CQUNyQixJQUFJLENBQUMsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUMzQixDQUFDO2FBQ0YsQ0FBQztRQUNKLENBQUM7UUFFRCxJQUFJLENBQUMsY0FBYyxHQUFHO1lBQ3BCLFVBQVUsRUFBRSxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsaUJBQWlCLENBQUM7U0FDckQsQ0FBQztJQUNKLENBQUM7SUFFRCxvQkFBb0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGdldHRleHQgfSBmcm9tICdAYzh5L25neC1jb21wb25lbnRzJztcbmltcG9ydCB7IEZvcm1seUZpZWxkQ29uZmlnIH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZSc7XG5pbXBvcnQgeyBmaWx0ZXIsIFN1YmplY3QsIHRha2VVbnRpbCwgdGFwIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBNYXBwaW5nQ29uZmlnIH0gZnJvbSAnLi9pbmRleCc7XG5pbXBvcnQgeyBGb3JtbHlWYWx1ZUNoYW5nZUV2ZW50IH0gZnJvbSAnQG5neC1mb3JtbHkvY29yZS9saWIvbW9kZWxzJztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEJhc2VPYmplY3RNYXBwaW5nIHtcbiAgcHJpdmF0ZSBmb3JtbHlGaWVsZENmZzogRm9ybWx5RmllbGRDb25maWc7XG4gIHByaXZhdGUgZGVzdHJveSQ6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuXG4gIGNvbnN0cnVjdG9yKGNvbmZpZzogTWFwcGluZ0NvbmZpZykge1xuICAgIGlmIChjb25maWcuZm9ybWx5RmllbGRDb25maWcpIHtcbiAgICAgIGNvbmZpZy5mb3JtbHlGaWVsZENvbmZpZy5leHByZXNzaW9ucyA9IHtcbiAgICAgICAgaGlkZTogZmllbGQgPT4ge1xuICAgICAgICAgIHJldHVybiAhZmllbGQucGFyZW50LmdldChgaGFzJHtjb25maWcuZm9ybWx5RmllbGRDb25maWcua2V5fWApLmZvcm1Db250cm9sLmdldFJhd1ZhbHVlKCk7XG4gICAgICAgIH1cbiAgICAgIH07XG4gICAgICBjb25maWcuZm9ybWx5RmllbGRDb25maWcuaG9va3MgPSB7XG4gICAgICAgIG9uSW5pdDogZmllbGQgPT4ge1xuICAgICAgICAgIGZpZWxkLnBhcmVudFxuICAgICAgICAgICAgLmdldChgaGFzJHtjb25maWcuZm9ybWx5RmllbGRDb25maWcua2V5fWApXG4gICAgICAgICAgICAuZm9ybUNvbnRyb2wucGF0Y2hWYWx1ZSghIWZpZWxkLnBhcmVudC5tb2RlbFtgJHtjb25maWcuZm9ybWx5RmllbGRDb25maWcua2V5fWBdKTtcblxuICAgICAgICAgIGZpZWxkLm9wdGlvbnMuZmllbGRDaGFuZ2VzXG4gICAgICAgICAgICAucGlwZShcbiAgICAgICAgICAgICAgZmlsdGVyKChjaGFuZ2VzOiBGb3JtbHlWYWx1ZUNoYW5nZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIChcbiAgICAgICAgICAgICAgICAgIGNoYW5nZXMudHlwZSA9PT0gJ3ZhbHVlQ2hhbmdlcycgJiYgY2hhbmdlcy5maWVsZCA9PT0gZmllbGQucGFyZW50LmZpZWxkR3JvdXBbMF1cbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgdGFwKChjaGFuZ2VzOiBGb3JtbHlWYWx1ZUNoYW5nZUV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGNoYW5nZXMudmFsdWUgPT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgICAgICAgICAgICBmaWVsZC5wYXJlbnRcbiAgICAgICAgICAgICAgICAgICAgLmdldChgaGFzJHtjb25maWcuZm9ybWx5RmllbGRDb25maWcua2V5fWApXG4gICAgICAgICAgICAgICAgICAgIC5mb3JtQ29udHJvbC5wYXRjaFZhbHVlKFxuICAgICAgICAgICAgICAgICAgICAgICEhZmllbGQucGFyZW50Lm1vZGVsW2Ake2NvbmZpZy5mb3JtbHlGaWVsZENvbmZpZy5rZXl9YF1cbiAgICAgICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgICAgY29uc3QgZm9ybUZpZWxkID0gZmllbGQucGFyZW50LmdldChcbiAgICAgICAgICAgICAgICAgICAgY29uZmlnLmZvcm1seUZpZWxkQ29uZmlnLmtleSBhcyBzdHJpbmdcbiAgICAgICAgICAgICAgICAgICkuZm9ybUNvbnRyb2w7XG4gICAgICAgICAgICAgICAgICBpZiAoZm9ybUZpZWxkKSB7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5tYXJrQXNQcmlzdGluZSgpO1xuICAgICAgICAgICAgICAgICAgICBmb3JtRmllbGQubWFya0FzVW50b3VjaGVkKCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgdGFrZVVudGlsKHRoaXMuZGVzdHJveSQpXG4gICAgICAgICAgICApXG4gICAgICAgICAgICAuc3Vic2NyaWJlKCk7XG4gICAgICAgIH0sXG4gICAgICAgIG9uRGVzdHJveTogKCkgPT4ge1xuICAgICAgICAgIHRoaXMuZGVzdHJveSQubmV4dCgpO1xuICAgICAgICAgIHRoaXMuZGVzdHJveSQuY29tcGxldGUoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9XG5cbiAgICBjb25maWcuYnV0dG9uVHlwZSA9IGNvbmZpZy5idXR0b25UeXBlIHx8ICdzd2l0Y2gnO1xuXG4gICAgY29uc3QgYnV0dG9uQ29uZmlnID1cbiAgICAgIGNvbmZpZy5idXR0b25UeXBlICE9PSAnbm9uZSdcbiAgICAgICAgPyB7XG4gICAgICAgICAgICBjbGFzc05hbWU6ICdsaXN0LWdyb3VwLWl0ZW0nLFxuICAgICAgICAgICAga2V5OiBgaGFzJHtjb25maWcuZm9ybWx5RmllbGRDb25maWcgPyBjb25maWcuZm9ybWx5RmllbGRDb25maWcua2V5IDogJ1N3aXRjaCd9YCxcbiAgICAgICAgICAgIHR5cGU6IGNvbmZpZy5idXR0b25UeXBlLFxuICAgICAgICAgICAgcHJvcHM6IHtcbiAgICAgICAgICAgICAgbGFiZWw6IGdldHRleHQoY29uZmlnLmxhYmVsKSxcbiAgICAgICAgICAgICAgaWNvbjogY29uZmlnLmljb24sXG4gICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiBjb25maWcudG9vbHRpcCxcbiAgICAgICAgICAgICAgc3dpdGNoTW9kZTogY29uZmlnLmJ1dHRvblR5cGUgPT09ICdzd2l0Y2gnXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgZXhwcmVzc2lvbnM6IHtcbiAgICAgICAgICAgICAgJ3Byb3BzLmRpc2FibGVkJzogY29uZmlnLmRpc2FibGVkIHx8ICgoKSA9PiBmYWxzZSlcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIDogdW5kZWZpbmVkO1xuXG4gICAgaWYgKGNvbmZpZy5mb3JtbHlGaWVsZENvbmZpZykge1xuICAgICAgY29uZmlnLmZvcm1seUZpZWxkQ29uZmlnLmV4cHJlc3Npb25zID0ge1xuICAgICAgICBoaWRlOiBmaWVsZCA9PiB7XG4gICAgICAgICAgcmV0dXJuICFmaWVsZC5wYXJlbnQuZ2V0KGBoYXMke2NvbmZpZy5mb3JtbHlGaWVsZENvbmZpZy5rZXl9YCkuZm9ybUNvbnRyb2wuZ2V0UmF3VmFsdWUoKTtcbiAgICAgICAgfVxuICAgICAgfTtcbiAgICAgIGNvbmZpZy5mb3JtbHlGaWVsZENvbmZpZy5ob29rcyA9IHtcbiAgICAgICAgb25Jbml0OiBmaWVsZCA9PiB7XG4gICAgICAgICAgZmllbGQucGFyZW50XG4gICAgICAgICAgICAuZ2V0KGBoYXMke2NvbmZpZy5mb3JtbHlGaWVsZENvbmZpZy5rZXl9YClcbiAgICAgICAgICAgIC5mb3JtQ29udHJvbC5wYXRjaFZhbHVlKCEhZmllbGQucGFyZW50Lm1vZGVsW2Ake2NvbmZpZy5mb3JtbHlGaWVsZENvbmZpZy5rZXl9YF0pO1xuXG4gICAgICAgICAgZmllbGQub3B0aW9ucy5maWVsZENoYW5nZXNcbiAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICBmaWx0ZXIoKGNoYW5nZXMsIF9pbmRleCkgPT4ge1xuICAgICAgICAgICAgICAgIHJldHVybiAoXG4gICAgICAgICAgICAgICAgICBjaGFuZ2VzLnR5cGUgPT09ICd2YWx1ZUNoYW5nZXMnICYmIGNoYW5nZXMuZmllbGQgPT09IGZpZWxkLnBhcmVudC5maWVsZEdyb3VwWzBdXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgIHRhcChjaGFuZ2VzID0+IHtcbiAgICAgICAgICAgICAgICBpZiAoY2hhbmdlcy52YWx1ZSA9PT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgICAgICAgICAgIGZpZWxkLnBhcmVudFxuICAgICAgICAgICAgICAgICAgICAuZ2V0KGBoYXMke2NvbmZpZy5mb3JtbHlGaWVsZENvbmZpZy5rZXl9YClcbiAgICAgICAgICAgICAgICAgICAgLmZvcm1Db250cm9sLnBhdGNoVmFsdWUoXG4gICAgICAgICAgICAgICAgICAgICAgISFmaWVsZC5wYXJlbnQubW9kZWxbYCR7Y29uZmlnLmZvcm1seUZpZWxkQ29uZmlnLmtleX1gXVxuICAgICAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgICBjb25zdCBmb3JtRmllbGQgPSBmaWVsZC5wYXJlbnQuZ2V0KFxuICAgICAgICAgICAgICAgICAgICBjb25maWcuZm9ybWx5RmllbGRDb25maWcua2V5IGFzIHN0cmluZ1xuICAgICAgICAgICAgICAgICAgKS5mb3JtQ29udHJvbDtcbiAgICAgICAgICAgICAgICAgIGlmIChmb3JtRmllbGQpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9ybUZpZWxkLm1hcmtBc1ByaXN0aW5lKCk7XG4gICAgICAgICAgICAgICAgICAgIGZvcm1GaWVsZC5tYXJrQXNVbnRvdWNoZWQoKTtcbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICB0YWtlVW50aWwodGhpcy5kZXN0cm95JClcbiAgICAgICAgICAgIClcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKTtcbiAgICAgICAgfSxcbiAgICAgICAgb25EZXN0cm95OiAoKSA9PiB7XG4gICAgICAgICAgdGhpcy5kZXN0cm95JC5uZXh0KCk7XG4gICAgICAgICAgdGhpcy5kZXN0cm95JC5jb21wbGV0ZSgpO1xuICAgICAgICB9XG4gICAgICB9O1xuICAgIH1cblxuICAgIHRoaXMuZm9ybWx5RmllbGRDZmcgPSB7XG4gICAgICBmaWVsZEdyb3VwOiBbYnV0dG9uQ29uZmlnLCBjb25maWcuZm9ybWx5RmllbGRDb25maWddXG4gICAgfTtcbiAgfVxuXG4gIGdldEZvcm1seUZpZWxkQ29uZmlnKCkge1xuICAgIHJldHVybiB0aGlzLmZvcm1seUZpZWxkQ2ZnO1xuICB9XG59XG4iXX0=