From e7fd826a85f4c1931933d209e8aa28de18065375 Mon Sep 17 00:00:00 2001 From: kalytka Date: Wed, 5 Jul 2023 13:59:07 +0300 Subject: [PATCH 1/2] Update courceBoolean Decorator --- ui-ngx/src/app/shared/decorators/coercion.ts | 34 ++++++++++++-------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/ui-ngx/src/app/shared/decorators/coercion.ts b/ui-ngx/src/app/shared/decorators/coercion.ts index c60cda730d..a43cc920cf 100644 --- a/ui-ngx/src/app/shared/decorators/coercion.ts +++ b/ui-ngx/src/app/shared/decorators/coercion.ts @@ -22,21 +22,29 @@ import { coerceStringArray as coerceStringArrayAngular } from '@angular/cdk/coercion'; -export const coerceBoolean = () => (target: any, key: string): void => { - const getter = function() { - return this['__' + key]; - }; +export const coerceBoolean = () => (target: any, key: string, propertyDescriptor?: PropertyDescriptor): void => { + if (!!propertyDescriptor && !!propertyDescriptor.set) { + const original = propertyDescriptor.set; - const setter = function(next: any) { - this['__' + key] = coerceBooleanProperty(next); - }; + propertyDescriptor.set = function(next) { + original.apply(this, [coerceBooleanProperty(next)]); + }; + } else { + const getter = function() { + return this['__' + key]; + }; - Object.defineProperty(target, key, { - get: getter, - set: setter, - enumerable: true, - configurable: true, - }); + const setter = function(next: any) { + this['__' + key] = coerceBooleanProperty(next); + }; + + Object.defineProperty(target, key, { + get: getter, + set: setter, + enumerable: true, + configurable: true, + }); + } }; export const coerceNumber = () => (target: any, key: string): void => { From afb41663227a3939110ef9490cb6feeba1ea8de2 Mon Sep 17 00:00:00 2001 From: kalytka Date: Wed, 5 Jul 2023 17:12:07 +0300 Subject: [PATCH 2/2] Update decorators --- ui-ngx/src/app/shared/decorators/coercion.ts | 137 ++++++++++++------- 1 file changed, 85 insertions(+), 52 deletions(-) diff --git a/ui-ngx/src/app/shared/decorators/coercion.ts b/ui-ngx/src/app/shared/decorators/coercion.ts index a43cc920cf..d1d00828f1 100644 --- a/ui-ngx/src/app/shared/decorators/coercion.ts +++ b/ui-ngx/src/app/shared/decorators/coercion.ts @@ -47,70 +47,103 @@ export const coerceBoolean = () => (target: any, key: string, propertyDescriptor } }; -export const coerceNumber = () => (target: any, key: string): void => { - const getter = function(): number { - return this['__' + key]; - }; +export const coerceNumber = () => (target: any, key: string, propertyDescriptor?: PropertyDescriptor): void => { + if (!!propertyDescriptor && !!propertyDescriptor.set) { + const original = propertyDescriptor.set; - const setter = function(next: any) { - this['__' + key] = coerceNumberProperty(next); - }; + propertyDescriptor.set = function(next) { + original.apply(this, [coerceNumberProperty(next)]); + }; + } else { + const getter = function() { + return this['__' + key]; + }; - Object.defineProperty(target, key, { - get: getter, - set: setter, - enumerable: true, - configurable: true, - }); + const setter = function(next: any) { + this['__' + key] = coerceNumberProperty(next); + }; + + Object.defineProperty(target, key, { + get: getter, + set: setter, + enumerable: true, + configurable: true, + }); + } }; -export const coerceCssPixelValue = () => (target: any, key: string): void => { - const getter = function(): string { - return this['__' + key]; - }; +export const coerceCssPixelValue = () => (target: any, key: string, propertyDescriptor?: PropertyDescriptor): void => { + if (!!propertyDescriptor && !!propertyDescriptor.set) { + const original = propertyDescriptor.set; - const setter = function(next: any) { - this['__' + key] = coerceCssPixelValueAngular(next); - }; + propertyDescriptor.set = function(next) { + original.apply(this, [coerceCssPixelValueAngular(next)]); + }; + } else { + const getter = function() { + return this['__' + key]; + }; - Object.defineProperty(target, key, { - get: getter, - set: setter, - enumerable: true, - configurable: true, - }); + const setter = function(next: any) { + this['__' + key] = coerceCssPixelValueAngular(next); + }; + + Object.defineProperty(target, key, { + get: getter, + set: setter, + enumerable: true, + configurable: true, + }); + } }; -export const coerceArray = () => (target: any, key: string): void => { - const getter = function(): any[] { - return this['__' + key]; - }; +export const coerceArray = () => (target: any, key: string, propertyDescriptor?: PropertyDescriptor): void => { + if (!!propertyDescriptor && !!propertyDescriptor.set) { + const original = propertyDescriptor.set; - const setter = function(next: any) { - this['__' + key] = coerceArrayAngular(next); - }; + propertyDescriptor.set = function(next) { + original.apply(this, [coerceArrayAngular(next)]); + }; + } else { + const getter = function() { + return this['__' + key]; + }; - Object.defineProperty(target, key, { - get: getter, - set: setter, - enumerable: true, - configurable: true, - }); + const setter = function(next: any) { + this['__' + key] = coerceArrayAngular(next); + }; + + Object.defineProperty(target, key, { + get: getter, + set: setter, + enumerable: true, + configurable: true, + }); + } }; -export const coerceStringArray = (separator?: string | RegExp) => (target: any, key: string): void => { - const getter = function(): string[] { - return this['__' + key]; - }; +export const coerceStringArray = (separator?: string | RegExp) => + (target: any, key: string, propertyDescriptor?: PropertyDescriptor): void => { + if (!!propertyDescriptor && !!propertyDescriptor.set) { + const original = propertyDescriptor.set; - const setter = function(next: any) { - this['__' + key] = coerceStringArrayAngular(next, separator); - }; + propertyDescriptor.set = function(next) { + original.apply(this, [coerceStringArrayAngular(next, separator)]); + }; + } else { + const getter = function() { + return this['__' + key]; + }; - Object.defineProperty(target, key, { - get: getter, - set: setter, - enumerable: true, - configurable: true, - }); + const setter = function(next: any) { + this['__' + key] = coerceStringArrayAngular(next, separator); + }; + + Object.defineProperty(target, key, { + get: getter, + set: setter, + enumerable: true, + configurable: true, + }); + } };