ngx-custom-validators-angular-14
Version:
Angular custom directives for validation
45 lines • 5.9 kB
JavaScript
import { UntypedFormControl, NgModel, Validators } from '@angular/forms';
import { isDate, isPresent, parseDate } from '../util/lang';
export const maxDate = (maxInput) => {
let value;
let subscribe = false;
let maxValue = maxInput;
const isForm = maxInput instanceof UntypedFormControl || maxInput instanceof NgModel;
return (control) => {
if (!subscribe && isForm) {
subscribe = true;
maxInput.valueChanges.subscribe(() => {
control.updateValueAndValidity();
});
}
if (isForm) {
maxValue = maxInput.value;
}
value = parseDate(maxValue);
if (!isDate(value) && !(value instanceof Function)) {
if (value == null) {
return null;
}
else if (isForm) {
return { maxDate: { error: 'maxDate is invalid' } };
}
else {
throw Error('maxDate value must be or return a formatted date');
}
}
if (isPresent(Validators.required(control))) {
return null;
}
const d = new Date(parseDate(control.value)).getTime();
if (!isDate(d)) {
return { value: true };
}
if (value instanceof Function) {
value = value();
}
return d <= new Date(value).getTime()
? null
: (isForm ? { maxDate: { control: maxInput, value: maxInput.value } } : { maxDate: { value: maxValue, control: undefined } });
};
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2FwcC9tYXgtZGF0ZS92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFtQixrQkFBa0IsRUFBRSxPQUFPLEVBQWlDLFVBQVUsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBQ3pILE9BQU8sRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUU1RCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxRQUFhLEVBQWUsRUFBRTtJQUNwRCxJQUFJLEtBQUssQ0FBQztJQUNWLElBQUksU0FBUyxHQUFHLEtBQUssQ0FBQztJQUN0QixJQUFJLFFBQVEsR0FBRyxRQUFRLENBQUM7SUFDeEIsTUFBTSxNQUFNLEdBQUcsUUFBUSxZQUFZLGtCQUFrQixJQUFJLFFBQVEsWUFBWSxPQUFPLENBQUM7SUFDckYsT0FBTyxDQUFDLE9BQXdCLEVBQW9CLEVBQUU7UUFDcEQsSUFBSSxDQUFDLFNBQVMsSUFBSSxNQUFNLEVBQUU7WUFDeEIsU0FBUyxHQUFHLElBQUksQ0FBQztZQUNqQixRQUFRLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxHQUFHLEVBQUU7Z0JBQ25DLE9BQU8sQ0FBQyxzQkFBc0IsRUFBRSxDQUFDO1lBQ25DLENBQUMsQ0FBQyxDQUFDO1NBQ0o7UUFFRCxJQUFJLE1BQU0sRUFBRTtZQUNWLFFBQVEsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDO1NBQzNCO1FBRUQsS0FBSyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUU1QixJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxLQUFLLFlBQVksUUFBUSxDQUFDLEVBQUU7WUFDbEQsSUFBSSxLQUFLLElBQUksSUFBSSxFQUFFO2dCQUNqQixPQUFPLElBQUksQ0FBQzthQUNiO2lCQUFNLElBQUksTUFBTSxFQUFFO2dCQUNqQixPQUFPLEVBQUUsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLG9CQUFvQixFQUFFLEVBQUUsQ0FBQzthQUNyRDtpQkFBTTtnQkFDTCxNQUFNLEtBQUssQ0FBQyxrREFBa0QsQ0FBQyxDQUFDO2FBQ2pFO1NBQ0Y7UUFFRCxJQUFJLFNBQVMsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUU7WUFDM0MsT0FBTyxJQUFJLENBQUM7U0FDYjtRQUVELE1BQU0sQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUV2RCxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO1lBQ2QsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsQ0FBQztTQUN4QjtRQUNELElBQUksS0FBSyxZQUFZLFFBQVEsRUFBRTtZQUM3QixLQUFLLEdBQUcsS0FBSyxFQUFFLENBQUM7U0FDakI7UUFFRCxPQUFPLENBQUMsSUFBSSxJQUFJLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxPQUFPLEVBQUU7WUFDbkMsQ0FBQyxDQUFDLElBQUk7WUFDTixDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsU0FBUyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2xJLENBQUMsQ0FBQztBQUNKLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0Q29udHJvbCwgVW50eXBlZEZvcm1Db250cm9sLCBOZ01vZGVsLCBWYWxpZGF0aW9uRXJyb3JzLCBWYWxpZGF0b3JGbiwgVmFsaWRhdG9ycyB9IGZyb20gJ0Bhbmd1bGFyL2Zvcm1zJztcbmltcG9ydCB7IGlzRGF0ZSwgaXNQcmVzZW50LCBwYXJzZURhdGUgfSBmcm9tICcuLi91dGlsL2xhbmcnO1xuXG5leHBvcnQgY29uc3QgbWF4RGF0ZSA9IChtYXhJbnB1dDogYW55KTogVmFsaWRhdG9yRm4gPT4ge1xuICBsZXQgdmFsdWU7XG4gIGxldCBzdWJzY3JpYmUgPSBmYWxzZTtcbiAgbGV0IG1heFZhbHVlID0gbWF4SW5wdXQ7XG4gIGNvbnN0IGlzRm9ybSA9IG1heElucHV0IGluc3RhbmNlb2YgVW50eXBlZEZvcm1Db250cm9sIHx8IG1heElucHV0IGluc3RhbmNlb2YgTmdNb2RlbDtcbiAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzID0+IHtcbiAgICBpZiAoIXN1YnNjcmliZSAmJiBpc0Zvcm0pIHtcbiAgICAgIHN1YnNjcmliZSA9IHRydWU7XG4gICAgICBtYXhJbnB1dC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoaXNGb3JtKSB7XG4gICAgICBtYXhWYWx1ZSA9IG1heElucHV0LnZhbHVlO1xuICAgIH1cblxuICAgIHZhbHVlID0gcGFyc2VEYXRlKG1heFZhbHVlKTtcblxuICAgIGlmICghaXNEYXRlKHZhbHVlKSAmJiAhKHZhbHVlIGluc3RhbmNlb2YgRnVuY3Rpb24pKSB7XG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAoaXNGb3JtKSB7XG4gICAgICAgIHJldHVybiB7IG1heERhdGU6IHsgZXJyb3I6ICdtYXhEYXRlIGlzIGludmFsaWQnIH0gfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IEVycm9yKCdtYXhEYXRlIHZhbHVlIG11c3QgYmUgb3IgcmV0dXJuIGEgZm9ybWF0dGVkIGRhdGUnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNQcmVzZW50KFZhbGlkYXRvcnMucmVxdWlyZWQoY29udHJvbCkpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBkID0gbmV3IERhdGUocGFyc2VEYXRlKGNvbnRyb2wudmFsdWUpKS5nZXRUaW1lKCk7XG5cbiAgICBpZiAoIWlzRGF0ZShkKSkge1xuICAgICAgcmV0dXJuIHsgdmFsdWU6IHRydWUgfTtcbiAgICB9XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgIHZhbHVlID0gdmFsdWUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZCA8PSBuZXcgRGF0ZSh2YWx1ZSkuZ2V0VGltZSgpXG4gICAgICA/IG51bGxcbiAgICAgIDogKGlzRm9ybSA/IHsgbWF4RGF0ZTogeyBjb250cm9sOiBtYXhJbnB1dCwgdmFsdWU6IG1heElucHV0LnZhbHVlIH0gfSA6IHsgbWF4RGF0ZTogeyB2YWx1ZTogbWF4VmFsdWUsIGNvbnRyb2w6IHVuZGVmaW5lZCB9IH0pO1xuICB9O1xufTtcbiJdfQ==