svogv
Version:
A decorator based approach for model driven forms, including an advanced DataGrid and a TreeView component.
37 lines • 4.3 kB
JavaScript
/**
* The compare decorator compares two field's values and
* shows an error message on the decorated field. The other field (compared to) does
* not has a decorator nor receives a message.
*
* @param withProperty A string that represents the compared field's name.
* @param msg A custom message.
*
*/
export function Compare(withProperty, msg) {
function compareInternalSetup(target, key) {
// create a helper property to transport a meta data value
Object.defineProperty(target, `__hasCompareProperty__${key}`, {
value: true,
enumerable: false,
configurable: false
});
Object.defineProperty(target, `__withCompare__${key}`, {
value: withProperty,
enumerable: false,
configurable: false
});
Object.defineProperty(target, `__errCompareProperty__${key}`, {
value: msg
|| `The field ${key} must have the same value as field ${withProperty}`,
enumerable: false,
configurable: false
});
}
// the original decorator
function compareInternal(target, property) {
compareInternalSetup(target, property.toString());
}
// return the decorator
return compareInternal;
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsLWNvbXBhcmUuZGVjb3JhdG9yLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uL3Byb2plY3RzL3N2b2d2L3NyYy8iLCJzb3VyY2VzIjpbImxpYi9kZWNvcmF0b3JzL3ZhbC1jb21wYXJlLmRlY29yYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7R0FRRztBQUNILE1BQU0sVUFBVSxPQUFPLENBQUMsWUFBb0IsRUFBRSxHQUFZO0lBRXhELFNBQVMsb0JBQW9CLENBQUMsTUFBVyxFQUFFLEdBQVc7UUFFcEQsMERBQTBEO1FBQzFELE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLHlCQUF5QixHQUFHLEVBQUUsRUFBRTtZQUM1RCxLQUFLLEVBQUUsSUFBSTtZQUNYLFVBQVUsRUFBRSxLQUFLO1lBQ2pCLFlBQVksRUFBRSxLQUFLO1NBQ3BCLENBQUMsQ0FBQztRQUVILE1BQU0sQ0FBQyxjQUFjLENBQUMsTUFBTSxFQUFFLGtCQUFrQixHQUFHLEVBQUUsRUFBRTtZQUNyRCxLQUFLLEVBQUUsWUFBWTtZQUNuQixVQUFVLEVBQUUsS0FBSztZQUNqQixZQUFZLEVBQUUsS0FBSztTQUNwQixDQUFDLENBQUM7UUFFSCxNQUFNLENBQUMsY0FBYyxDQUFDLE1BQU0sRUFBRSx5QkFBeUIsR0FBRyxFQUFFLEVBQUU7WUFDNUQsS0FBSyxFQUFFLEdBQUc7bUJBQ0wsYUFBYSxHQUFHLHNDQUFzQyxZQUFZLEVBQUU7WUFDekUsVUFBVSxFQUFFLEtBQUs7WUFDakIsWUFBWSxFQUFFLEtBQUs7U0FDcEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELHlCQUF5QjtJQUN6QixTQUFTLGVBQWUsQ0FBQyxNQUFjLEVBQUUsUUFBeUI7UUFDaEUsb0JBQW9CLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0lBQ3BELENBQUM7SUFFRCx1QkFBdUI7SUFDdkIsT0FBTyxlQUFlLENBQUM7QUFDekIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVGhlIGNvbXBhcmUgZGVjb3JhdG9yIGNvbXBhcmVzIHR3byBmaWVsZCdzIHZhbHVlcyBhbmRcbiAqIHNob3dzIGFuIGVycm9yIG1lc3NhZ2Ugb24gdGhlIGRlY29yYXRlZCBmaWVsZC4gVGhlIG90aGVyIGZpZWxkIChjb21wYXJlZCB0bykgZG9lc1xuICogbm90IGhhcyBhIGRlY29yYXRvciBub3IgcmVjZWl2ZXMgYSBtZXNzYWdlLlxuICpcbiAqIEBwYXJhbSB3aXRoUHJvcGVydHkgQSBzdHJpbmcgdGhhdCByZXByZXNlbnRzIHRoZSBjb21wYXJlZCBmaWVsZCdzIG5hbWUuXG4gKiBAcGFyYW0gbXNnIEEgY3VzdG9tIG1lc3NhZ2UuXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gQ29tcGFyZSh3aXRoUHJvcGVydHk6IHN0cmluZywgbXNnPzogc3RyaW5nKSB7XG5cbiAgZnVuY3Rpb24gY29tcGFyZUludGVybmFsU2V0dXAodGFyZ2V0OiBhbnksIGtleTogc3RyaW5nKSB7XG5cbiAgICAvLyBjcmVhdGUgYSBoZWxwZXIgcHJvcGVydHkgdG8gdHJhbnNwb3J0IGEgbWV0YSBkYXRhIHZhbHVlXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgYF9faGFzQ29tcGFyZVByb3BlcnR5X18ke2tleX1gLCB7XG4gICAgICB2YWx1ZTogdHJ1ZSxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZVxuICAgIH0pO1xuXG4gICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgYF9fd2l0aENvbXBhcmVfXyR7a2V5fWAsIHtcbiAgICAgIHZhbHVlOiB3aXRoUHJvcGVydHksXG4gICAgICBlbnVtZXJhYmxlOiBmYWxzZSxcbiAgICAgIGNvbmZpZ3VyYWJsZTogZmFsc2VcbiAgICB9KTtcblxuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGBfX2VyckNvbXBhcmVQcm9wZXJ0eV9fJHtrZXl9YCwge1xuICAgICAgdmFsdWU6IG1zZ1xuICAgICAgICB8fCBgVGhlIGZpZWxkICR7a2V5fSBtdXN0IGhhdmUgdGhlIHNhbWUgdmFsdWUgYXMgZmllbGQgJHt3aXRoUHJvcGVydHl9YCxcbiAgICAgIGVudW1lcmFibGU6IGZhbHNlLFxuICAgICAgY29uZmlndXJhYmxlOiBmYWxzZVxuICAgIH0pO1xuICB9XG5cbiAgLy8gdGhlIG9yaWdpbmFsIGRlY29yYXRvclxuICBmdW5jdGlvbiBjb21wYXJlSW50ZXJuYWwodGFyZ2V0OiBvYmplY3QsIHByb3BlcnR5OiBzdHJpbmcgfCBzeW1ib2wpOiB2b2lkIHtcbiAgICBjb21wYXJlSW50ZXJuYWxTZXR1cCh0YXJnZXQsIHByb3BlcnR5LnRvU3RyaW5nKCkpO1xuICB9XG5cbiAgLy8gcmV0dXJuIHRoZSBkZWNvcmF0b3JcbiAgcmV0dXJuIGNvbXBhcmVJbnRlcm5hbDtcbn1cbiJdfQ==