svogv
Version:
A decorator based approach for model driven forms, including an advanced DataGrid and a TreeView component.
39 lines • 4.7 kB
JavaScript
/**
* Validates a field against an range. Applies to numerical values or dates.
*
* The range's values are included in the valid range.
*
* @param from The minimum value (included) as number or Date
* @param to The maximum value (included) as number or Date
* @param msg A custom message. If not provided "The field [field] does not fall into the range from [from] to [to]"
* will be generated, while [field] is the propertie's name.
*/
export function Range(from, to, msg) {
function rangeInternalSetup(target, key) {
// property value
// create a helper property to transport a meta data value
Object.defineProperty(target, `__hasRangeFrom__${key}`, {
value: from,
enumerable: false,
configurable: false
});
Object.defineProperty(target, `__hasRangeTo__${key}`, {
value: to,
enumerable: false,
configurable: false
});
Object.defineProperty(target, `__errRange__${key}`, {
value: msg
|| `The field ${key} does not fall into the range from ${from} to ${to}`,
enumerable: false,
configurable: false
});
}
// the original decorator
function rangeInternal(target, property) {
rangeInternalSetup(target, property.toString());
}
// return the decorator
return rangeInternal;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsLXJhbmdlLmRlY29yYXRvci5qcyIsInNvdXJjZVJvb3QiOiIuLi8uLi8uLi9wcm9qZWN0cy9zdm9ndi9zcmMvIiwic291cmNlcyI6WyJsaWIvZGVjb3JhdG9ycy92YWwtcmFuZ2UuZGVjb3JhdG9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7R0FTRztBQUNILE1BQU0sVUFBVSxLQUFLLENBQUMsSUFBbUIsRUFBRSxFQUFpQixFQUFFLEdBQVk7SUFFeEUsU0FBUyxrQkFBa0IsQ0FBQyxNQUFXLEVBQUUsR0FBVztRQUNsRCxpQkFBaUI7UUFFakIsMERBQTBEO1FBQzFELE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLG1CQUFtQixHQUFHLEVBQUUsRUFBRTtZQUN0RCxLQUFLLEVBQUUsSUFBSTtZQUNYLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFlBQVksRUFBRSxLQUFLO1NBQ3BCLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLGlCQUFpQixHQUFHLEVBQUUsRUFBRTtZQUNwRCxLQUFLLEVBQUUsRUFBRTtZQUNULFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFlBQVksRUFBRSxLQUFLO1NBQ3BCLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLGVBQWUsR0FBRyxFQUFFLEVBQUU7WUFDbEQsS0FBSyxFQUFFLEdBQUc7bUJBQ0wsYUFBYSxHQUFHLHNDQUFzQyxJQUFJLE9BQU8sRUFBRSxFQUFFO1lBQzFFLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFlBQVksRUFBRSxLQUFLO1NBQ3BCLENBQUMsQ0FBQztJQUVMLENBQUM7SUFDRCx5QkFBeUI7SUFDekIsU0FBUyxhQUFhLENBQUMsTUFBYyxFQUFFLFFBQXlCO1FBQzlELGtCQUFrQixDQUFDLE1BQU0sRUFBRSxRQUFRLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQsdUJBQXVCO0lBQ3ZCLE9BQU8sYUFBYSxDQUFDO0FBQ3ZCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFZhbGlkYXRlcyBhIGZpZWxkIGFnYWluc3QgYW4gcmFuZ2UuIEFwcGxpZXMgdG8gbnVtZXJpY2FsIHZhbHVlcyBvciBkYXRlcy5cbiAqXG4gKiBUaGUgcmFuZ2UncyB2YWx1ZXMgYXJlIGluY2x1ZGVkIGluIHRoZSB2YWxpZCByYW5nZS5cbiAqXG4gKiBAcGFyYW0gZnJvbSAgVGhlIG1pbmltdW0gdmFsdWUgKGluY2x1ZGVkKSBhcyBudW1iZXIgb3IgRGF0ZVxuICogQHBhcmFtIHRvICAgIFRoZSBtYXhpbXVtIHZhbHVlIChpbmNsdWRlZCkgYXMgbnVtYmVyIG9yIERhdGVcbiAqIEBwYXJhbSBtc2cgICBBIGN1c3RvbSBtZXNzYWdlLiBJZiBub3QgcHJvdmlkZWQgXCJUaGUgZmllbGQgW2ZpZWxkXSBkb2VzIG5vdCBmYWxsIGludG8gdGhlIHJhbmdlIGZyb20gW2Zyb21dIHRvIFt0b11cIlxuICogICAgICAgICAgICAgIHdpbGwgYmUgZ2VuZXJhdGVkLCB3aGlsZSBbZmllbGRdIGlzIHRoZSBwcm9wZXJ0aWUncyBuYW1lLlxuICovXG5leHBvcnQgZnVuY3Rpb24gUmFuZ2UoZnJvbTogbnVtYmVyIHwgRGF0ZSwgdG86IG51bWJlciB8IERhdGUsIG1zZz86IHN0cmluZykge1xuXG4gIGZ1bmN0aW9uIHJhbmdlSW50ZXJuYWxTZXR1cCh0YXJnZXQ6IGFueSwga2V5OiBzdHJpbmcpIHtcbiAgICAvLyBwcm9wZXJ0eSB2YWx1ZVxuXG4gICAgLy8gY3JlYXRlIGEgaGVscGVyIHByb3BlcnR5IHRvIHRyYW5zcG9ydCBhIG1ldGEgZGF0YSB2YWx1ZVxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGBfX2hhc1JhbmdlRnJvbV9fJHtrZXl9YCwge1xuICAgICAgdmFsdWU6IGZyb20sXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2VcbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGBfX2hhc1JhbmdlVG9fXyR7a2V5fWAsIHtcbiAgICAgIHZhbHVlOiB0byxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgYF9fZXJyUmFuZ2VfXyR7a2V5fWAsIHtcbiAgICAgIHZhbHVlOiBtc2dcbiAgICAgICAgfHwgYFRoZSBmaWVsZCAke2tleX0gZG9lcyBub3QgZmFsbCBpbnRvIHRoZSByYW5nZSBmcm9tICR7ZnJvbX0gdG8gJHt0b31gLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlXG4gICAgfSk7XG5cbiAgfVxuICAvLyB0aGUgb3JpZ2luYWwgZGVjb3JhdG9yXG4gIGZ1bmN0aW9uIHJhbmdlSW50ZXJuYWwodGFyZ2V0OiBvYmplY3QsIHByb3BlcnR5OiBzdHJpbmcgfCBzeW1ib2wpOiB2b2lkIHtcbiAgICByYW5nZUludGVybmFsU2V0dXAodGFyZ2V0LCBwcm9wZXJ0eS50b1N0cmluZygpKTtcbiAgfVxuXG4gIC8vIHJldHVybiB0aGUgZGVjb3JhdG9yXG4gIHJldHVybiByYW5nZUludGVybmFsO1xufVxuIl19