svogv
Version:
A decorator based approach for model driven forms, including an advanced DataGrid and a TreeView component.
31 lines • 3.53 kB
JavaScript
/**
* A custom validator to compare two fields. This is internally to support the infrastructure
* and not intended to being used by custom code.
*
* @param p The field's name
*
*/
export function validateCompare(p) {
let changeEventWasAdded = false;
return function (c) {
const form = c.root;
if (form && form.controls && !changeEventWasAdded) {
form.controls[p].valueChanges.subscribe(() => {
// trigger validation for particular element
c.updateValueAndValidity();
});
changeEventWasAdded = true;
}
if (c.value) {
// compare the current value with the referenced control's value
return !c.value || c.value === c.root['controls'][p].value
? null
: {
compare: {
valid: false
}
};
}
};
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcGFyZS52YWxpZGF0b3IuanMiLCJzb3VyY2VSb290IjoiLi4vLi4vLi4vcHJvamVjdHMvc3ZvZ3Yvc3JjLyIsInNvdXJjZXMiOlsibGliL3NlcnZpY2VzL3ZhbGlkYXRvcnMvY29tcGFyZS52YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUE7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBQyxDQUFTO0lBQ3ZDLElBQUksbUJBQW1CLEdBQUcsS0FBSyxDQUFDO0lBQ2hDLE9BQU8sVUFBUyxDQUFjO1FBQzVCLE1BQU0sSUFBSSxHQUFjLENBQUMsQ0FBQyxJQUFpQixDQUFDO1FBQzVDLElBQUksSUFBSSxJQUFJLElBQUksQ0FBQyxRQUFRLElBQUksQ0FBQyxtQkFBbUIsRUFBRTtZQUNqRCxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsR0FBRyxFQUFFO2dCQUMzQyw0Q0FBNEM7Z0JBQzVDLENBQUMsQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQzdCLENBQUMsQ0FBQyxDQUFDO1lBQ0gsbUJBQW1CLEdBQUcsSUFBSSxDQUFDO1NBQzVCO1FBQ0QsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFO1lBQ1gsZ0VBQWdFO1lBQ2hFLE9BQU8sQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQyxLQUFLLEtBQVcsQ0FBQyxDQUFDLElBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLO2dCQUMvRCxDQUFDLENBQUMsSUFBSTtnQkFDTixDQUFDLENBQUM7b0JBQ0UsT0FBTyxFQUFFO3dCQUNQLEtBQUssRUFBRSxLQUFLO3FCQUNiO2lCQUNGLENBQUM7U0FDUDtJQUNILENBQUMsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGb3JtQ29udHJvbCwgRm9ybUdyb3VwIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xyXG5cclxuLyoqXHJcbiAqIEEgY3VzdG9tIHZhbGlkYXRvciB0byBjb21wYXJlIHR3byBmaWVsZHMuIFRoaXMgaXMgaW50ZXJuYWxseSB0byBzdXBwb3J0IHRoZSBpbmZyYXN0cnVjdHVyZVxyXG4gKiBhbmQgbm90IGludGVuZGVkIHRvIGJlaW5nIHVzZWQgYnkgY3VzdG9tIGNvZGUuXHJcbiAqXHJcbiAqIEBwYXJhbSBwIFRoZSBmaWVsZCdzIG5hbWVcclxuICpcclxuICovXHJcbmV4cG9ydCBmdW5jdGlvbiB2YWxpZGF0ZUNvbXBhcmUocDogc3RyaW5nKSB7XHJcbiAgbGV0IGNoYW5nZUV2ZW50V2FzQWRkZWQgPSBmYWxzZTtcclxuICByZXR1cm4gZnVuY3Rpb24oYzogRm9ybUNvbnRyb2wpIHtcclxuICAgIGNvbnN0IGZvcm06IEZvcm1Hcm91cCA9IGMucm9vdCBhcyBGb3JtR3JvdXA7XHJcbiAgICBpZiAoZm9ybSAmJiBmb3JtLmNvbnRyb2xzICYmICFjaGFuZ2VFdmVudFdhc0FkZGVkKSB7XHJcbiAgICAgIGZvcm0uY29udHJvbHNbcF0udmFsdWVDaGFuZ2VzLnN1YnNjcmliZSgoKSA9PiB7XHJcbiAgICAgICAgLy8gdHJpZ2dlciB2YWxpZGF0aW9uIGZvciBwYXJ0aWN1bGFyIGVsZW1lbnRcclxuICAgICAgICBjLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcclxuICAgICAgfSk7XHJcbiAgICAgIGNoYW5nZUV2ZW50V2FzQWRkZWQgPSB0cnVlO1xyXG4gICAgfVxyXG4gICAgaWYgKGMudmFsdWUpIHtcclxuICAgICAgLy8gY29tcGFyZSB0aGUgY3VycmVudCB2YWx1ZSB3aXRoIHRoZSByZWZlcmVuY2VkIGNvbnRyb2wncyB2YWx1ZVxyXG4gICAgICByZXR1cm4gIWMudmFsdWUgfHwgYy52YWx1ZSA9PT0gKDxhbnk+Yy5yb290KVsnY29udHJvbHMnXVtwXS52YWx1ZVxyXG4gICAgICAgID8gbnVsbFxyXG4gICAgICAgIDoge1xyXG4gICAgICAgICAgICBjb21wYXJlOiB7XHJcbiAgICAgICAgICAgICAgdmFsaWQ6IGZhbHNlXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgIH07XHJcbiAgICB9XHJcbiAgfTtcclxufVxyXG4iXX0=