UI: Add new coercion decorator method

This commit is contained in:
Vladyslav_Prykhodko 2023-05-04 17:53:27 +03:00
parent f438c51b12
commit 7da4d9b4fe

View File

@ -14,7 +14,13 @@
/// limitations under the License.
///
import { coerceBooleanProperty } from '@angular/cdk/coercion';
import {
coerceArray,
coerceBooleanProperty,
coerceCssPixelValue,
coerceNumberProperty,
coerceStringArray
} from '@angular/cdk/coercion';
export const coerceBoolean = () => (target: any, key: string): void => {
const getter = function() {
@ -32,3 +38,71 @@ export const coerceBoolean = () => (target: any, key: string): void => {
configurable: true,
});
};
export const coerceNumber = () => (target: any, key: string): void => {
const getter = function(): number {
return this['__' + key];
};
const setter = function(next: any) {
this['__' + key] = coerceNumberProperty(next);
};
Object.defineProperty(target, key, {
get: getter,
set: setter,
enumerable: true,
configurable: true,
});
};
export const coerceCssPixelProperty = () => (target: any, key: string): void => {
const getter = function(): string {
return this['__' + key];
};
const setter = function(next: any) {
this['__' + key] = coerceCssPixelValue(next);
};
Object.defineProperty(target, key, {
get: getter,
set: setter,
enumerable: true,
configurable: true,
});
};
export const coerceArrayProperty = () => (target: any, key: string): void => {
const getter = function(): any[] {
return this['__' + key];
};
const setter = function(next: any) {
this['__' + key] = coerceArray(next);
};
Object.defineProperty(target, key, {
get: getter,
set: setter,
enumerable: true,
configurable: true,
});
};
export const coerceStringArrayProperty = (separator?: string | RegExp) => (target: any, key: string): void => {
const getter = function(): string[] {
return this['__' + key];
};
const setter = function(next: any) {
this['__' + key] = coerceStringArray(next, separator);
};
Object.defineProperty(target, key, {
get: getter,
set: setter,
enumerable: true,
configurable: true,
});
};