@katze/ngx-input-default-value
Version:
A decorator that set default values to your component inputs and properties
40 lines (36 loc) • 1.43 kB
JavaScript
import { isNil, isObject, isArray, defaultsDeep } from 'lodash-es';
/**
* Sets a given default value to the decorated property when his value is "null" or "undefined".
* In case the type of the decorated property is "Array" or "Object" it will do assignment recursively for all properties or cells.
*
* @param {T} defaultValue - A default value to use for the decorated property.
* @return {PropertyDecorator}
*/
function InputDefaultValue(defaultValue) {
return (target, propertyKey, descriptor = {
configurable: true,
enumerable: true
}) => {
const privatePropertyKey = `_${propertyKey}`;
const originalSetter = descriptor.set || (val => (target[privatePropertyKey] = val));
descriptor.get = descriptor.get || (() => target[privatePropertyKey]);
descriptor.set = (value) => {
if (isNil(value)) {
originalSetter.call(target, defaultValue);
}
else if (isObject(defaultValue) || isArray(defaultValue)) {
originalSetter.call(target, defaultsDeep(value, defaultValue));
}
else {
originalSetter.call(target, value);
}
};
originalSetter.call(target, defaultValue);
return descriptor;
};
}
/**
* Generated bundle index. Do not edit.
*/
export { InputDefaultValue };
//# sourceMappingURL=katze-ngx-input-default-value.js.map