svogv
Version:
A decorator based approach for model driven forms, including an advanced DataGrid and a TreeView component.
42 lines • 5.22 kB
JavaScript
/**
* The decorator that assures that a string field contains at least a number of characters and a minimum number, too.
* The default message is 'The field {fieldname} needs at least {minlength} characters'.
*
* @param min: The required length.
* @param max: The maximum length.
* @param msg: Optionally a custom message.
*
*/
export function StringLength(min, max, msg) {
function stringLengthInternalSetup(target, key) {
// create a helper property to transport a meta data value
Object.defineProperty(target, `__hasMaxLength__${key}`, {
value: max,
enumerable: false,
configurable: false
});
Object.defineProperty(target, `__errMaxLength__${key}`, {
value: msg || `The field ${key} has max length of ${max} characters`,
enumerable: false,
configurable: false
});
// create a helper property to transport a meta data value
Object.defineProperty(target, `__hasMinLength__${key}`, {
value: min,
enumerable: false,
configurable: false
});
Object.defineProperty(target, `__errMinLength__${key}`, {
value: msg || `The field ${key} needs at least ${min} characters`,
enumerable: false,
configurable: false
});
}
// the original decorator
function stringLengthInternal(target, property) {
stringLengthInternalSetup(target, property.toString());
}
// return the decorator
return stringLengthInternal;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsLXN0cmluZ2xlbmd0aC5kZWNvcmF0b3IuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vcHJvamVjdHMvc3ZvZ3Yvc3JjLyIsInNvdXJjZXMiOlsibGliL2RlY29yYXRvcnMvdmFsLXN0cmluZ2xlbmd0aC5kZWNvcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7O0dBUUc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLEdBQVcsRUFBRSxHQUFXLEVBQUUsR0FBWTtJQUNqRSxTQUFTLHlCQUF5QixDQUFDLE1BQVcsRUFBRSxHQUFXO1FBRXpELDBEQUEwRDtRQUMxRCxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxtQkFBbUIsR0FBRyxFQUFFLEVBQUU7WUFDdEQsS0FBSyxFQUFFLEdBQUc7WUFDVixVQUFVLEVBQUUsS0FBSztZQUNqQixZQUFZLEVBQUUsS0FBSztTQUNwQixDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSxtQkFBbUIsR0FBRyxFQUFFLEVBQUU7WUFDdEQsS0FBSyxFQUFFLEdBQUcsSUFBSSxhQUFhLEdBQUcsc0JBQXNCLEdBQUcsYUFBYTtZQUNwRSxVQUFVLEVBQUUsS0FBSztZQUNqQixZQUFZLEVBQUUsS0FBSztTQUNwQixDQUFDLENBQUM7UUFFSCwwREFBMEQ7UUFDMUQsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLEdBQUcsRUFBRSxFQUFFO1lBQ3RELEtBQUssRUFBRSxHQUFHO1lBQ1YsVUFBVSxFQUFFLEtBQUs7WUFDakIsWUFBWSxFQUFFLEtBQUs7U0FDcEIsQ0FBQyxDQUFDO1FBRUgsTUFBTSxDQUFDLGNBQWMsQ0FBQyxNQUFNLEVBQUUsbUJBQW1CLEdBQUcsRUFBRSxFQUFFO1lBQ3RELEtBQUssRUFBRSxHQUFHLElBQUksYUFBYSxHQUFHLG1CQUFtQixHQUFHLGFBQWE7WUFDakUsVUFBVSxFQUFFLEtBQUs7WUFDakIsWUFBWSxFQUFFLEtBQUs7U0FDcEIsQ0FBQyxDQUFDO0lBRUwsQ0FBQztJQUNELHlCQUF5QjtJQUN6QixTQUFTLG9CQUFvQixDQUFDLE1BQWMsRUFBRSxRQUF5QjtRQUNyRSx5QkFBeUIsQ0FBQyxNQUFNLEVBQUUsUUFBUSxDQUFDLFFBQVEsRUFBRSxDQUFDLENBQUM7SUFDekQsQ0FBQztJQUVELHVCQUF1QjtJQUN2QixPQUFPLG9CQUFvQixDQUFDO0FBQzlCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIFRoZSBkZWNvcmF0b3IgdGhhdCBhc3N1cmVzIHRoYXQgYSBzdHJpbmcgZmllbGQgY29udGFpbnMgYXQgbGVhc3QgYSBudW1iZXIgb2YgY2hhcmFjdGVycyBhbmQgYSBtaW5pbXVtIG51bWJlciwgdG9vLlxuICogVGhlIGRlZmF1bHQgbWVzc2FnZSBpcyAnVGhlIGZpZWxkIHtmaWVsZG5hbWV9IG5lZWRzIGF0IGxlYXN0IHttaW5sZW5ndGh9IGNoYXJhY3RlcnMnLlxuICpcbiAqIEBwYXJhbSBtaW46IFRoZSByZXF1aXJlZCBsZW5ndGguXG4gKiBAcGFyYW0gbWF4OiBUaGUgbWF4aW11bSBsZW5ndGguXG4gKiBAcGFyYW0gbXNnOiBPcHRpb25hbGx5IGEgY3VzdG9tIG1lc3NhZ2UuXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gU3RyaW5nTGVuZ3RoKG1pbjogbnVtYmVyLCBtYXg6IG51bWJlciwgbXNnPzogc3RyaW5nKSB7XG4gIGZ1bmN0aW9uIHN0cmluZ0xlbmd0aEludGVybmFsU2V0dXAodGFyZ2V0OiBhbnksIGtleTogc3RyaW5nKSB7XG5cbiAgICAvLyBjcmVhdGUgYSBoZWxwZXIgcHJvcGVydHkgdG8gdHJhbnNwb3J0IGEgbWV0YSBkYXRhIHZhbHVlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgYF9faGFzTWF4TGVuZ3RoX18ke2tleX1gLCB7XG4gICAgICB2YWx1ZTogbWF4LFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlXG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBgX19lcnJNYXhMZW5ndGhfXyR7a2V5fWAsIHtcbiAgICAgIHZhbHVlOiBtc2cgfHwgYFRoZSBmaWVsZCAke2tleX0gaGFzIG1heCBsZW5ndGggb2YgJHttYXh9IGNoYXJhY3RlcnNgLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlXG4gICAgfSk7XG5cbiAgICAvLyBjcmVhdGUgYSBoZWxwZXIgcHJvcGVydHkgdG8gdHJhbnNwb3J0IGEgbWV0YSBkYXRhIHZhbHVlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgYF9faGFzTWluTGVuZ3RoX18ke2tleX1gLCB7XG4gICAgICB2YWx1ZTogbWluLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlXG4gICAgfSk7XG5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBgX19lcnJNaW5MZW5ndGhfXyR7a2V5fWAsIHtcbiAgICAgIHZhbHVlOiBtc2cgfHwgYFRoZSBmaWVsZCAke2tleX0gbmVlZHMgYXQgbGVhc3QgJHttaW59IGNoYXJhY3RlcnNgLFxuICAgICAgZW51bWVyYWJsZTogZmFsc2UsXG4gICAgICBjb25maWd1cmFibGU6IGZhbHNlXG4gICAgfSk7XG5cbiAgfVxuICAvLyB0aGUgb3JpZ2luYWwgZGVjb3JhdG9yXG4gIGZ1bmN0aW9uIHN0cmluZ0xlbmd0aEludGVybmFsKHRhcmdldDogb2JqZWN0LCBwcm9wZXJ0eTogc3RyaW5nIHwgc3ltYm9sKTogdm9pZCB7XG4gICAgc3RyaW5nTGVuZ3RoSW50ZXJuYWxTZXR1cCh0YXJnZXQsIHByb3BlcnR5LnRvU3RyaW5nKCkpO1xuICB9XG5cbiAgLy8gcmV0dXJuIHRoZSBkZWNvcmF0b3JcbiAgcmV0dXJuIHN0cmluZ0xlbmd0aEludGVybmFsO1xufVxuIl19