UNPKG

ngx-custom-validators

Version:
45 lines 5.86 kB
import { FormControl, 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 FormControl || 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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLyIsInNvdXJjZXMiOlsic3JjL2FwcC9tYXgtZGF0ZS92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFtQixXQUFXLEVBQUUsT0FBTyxFQUFpQyxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFNUQsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLENBQUMsUUFBYSxFQUFlLEVBQUU7SUFDcEQsSUFBSSxLQUFLLENBQUM7SUFDVixJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDdEIsSUFBSSxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQ3hCLE1BQU0sTUFBTSxHQUFHLFFBQVEsWUFBWSxXQUFXLElBQUksUUFBUSxZQUFZLE9BQU8sQ0FBQztJQUM5RSxPQUFPLENBQUMsT0FBd0IsRUFBb0IsRUFBRTtRQUNwRCxJQUFJLENBQUMsU0FBUyxJQUFJLE1BQU0sRUFBRTtZQUN4QixTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ2pCLFFBQVEsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDbkMsT0FBTyxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDbkMsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUVELElBQUksTUFBTSxFQUFFO1lBQ1YsUUFBUSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7U0FDM0I7UUFFRCxLQUFLLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTVCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssWUFBWSxRQUFRLENBQUMsRUFBRTtZQUNsRCxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUU7Z0JBQ2pCLE9BQU8sSUFBSSxDQUFDO2FBQ2I7aUJBQU0sSUFBSSxNQUFNLEVBQUU7Z0JBQ2pCLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsRUFBRSxDQUFDO2FBQ3JEO2lCQUFNO2dCQUNMLE1BQU0sS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7YUFDakU7U0FDRjtRQUVELElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtZQUMzQyxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsTUFBTSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRXZELElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDZCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO1NBQ3hCO1FBQ0QsSUFBSSxLQUFLLFlBQVksUUFBUSxFQUFFO1lBQzdCLEtBQUssR0FBRyxLQUFLLEVBQUUsQ0FBQztTQUNqQjtRQUVELE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sRUFBRTtZQUNuQyxDQUFDLENBQUMsSUFBSTtZQUNOLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbEksQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQ29udHJvbCwgTmdNb2RlbCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBpc0RhdGUsIGlzUHJlc2VudCwgcGFyc2VEYXRlIH0gZnJvbSAnLi4vdXRpbC9sYW5nJztcblxuZXhwb3J0IGNvbnN0IG1heERhdGUgPSAobWF4SW5wdXQ6IGFueSk6IFZhbGlkYXRvckZuID0+IHtcbiAgbGV0IHZhbHVlO1xuICBsZXQgc3Vic2NyaWJlID0gZmFsc2U7XG4gIGxldCBtYXhWYWx1ZSA9IG1heElucHV0O1xuICBjb25zdCBpc0Zvcm0gPSBtYXhJbnB1dCBpbnN0YW5jZW9mIEZvcm1Db250cm9sIHx8IG1heElucHV0IGluc3RhbmNlb2YgTmdNb2RlbDtcbiAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzID0+IHtcbiAgICBpZiAoIXN1YnNjcmliZSAmJiBpc0Zvcm0pIHtcbiAgICAgIHN1YnNjcmliZSA9IHRydWU7XG4gICAgICBtYXhJbnB1dC52YWx1ZUNoYW5nZXMuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgY29udHJvbC51cGRhdGVWYWx1ZUFuZFZhbGlkaXR5KCk7XG4gICAgICB9KTtcbiAgICB9XG5cbiAgICBpZiAoaXNGb3JtKSB7XG4gICAgICBtYXhWYWx1ZSA9IG1heElucHV0LnZhbHVlO1xuICAgIH1cblxuICAgIHZhbHVlID0gcGFyc2VEYXRlKG1heFZhbHVlKTtcblxuICAgIGlmICghaXNEYXRlKHZhbHVlKSAmJiAhKHZhbHVlIGluc3RhbmNlb2YgRnVuY3Rpb24pKSB7XG4gICAgICBpZiAodmFsdWUgPT0gbnVsbCkge1xuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgIH0gZWxzZSBpZiAoaXNGb3JtKSB7XG4gICAgICAgIHJldHVybiB7IG1heERhdGU6IHsgZXJyb3I6ICdtYXhEYXRlIGlzIGludmFsaWQnIH0gfTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IEVycm9yKCdtYXhEYXRlIHZhbHVlIG11c3QgYmUgb3IgcmV0dXJuIGEgZm9ybWF0dGVkIGRhdGUnKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaXNQcmVzZW50KFZhbGlkYXRvcnMucmVxdWlyZWQoY29udHJvbCkpKSB7XG4gICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBjb25zdCBkID0gbmV3IERhdGUocGFyc2VEYXRlKGNvbnRyb2wudmFsdWUpKS5nZXRUaW1lKCk7XG5cbiAgICBpZiAoIWlzRGF0ZShkKSkge1xuICAgICAgcmV0dXJuIHsgdmFsdWU6IHRydWUgfTtcbiAgICB9XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgRnVuY3Rpb24pIHtcbiAgICAgIHZhbHVlID0gdmFsdWUoKTtcbiAgICB9XG5cbiAgICByZXR1cm4gZCA8PSBuZXcgRGF0ZSh2YWx1ZSkuZ2V0VGltZSgpXG4gICAgICA/IG51bGxcbiAgICAgIDogKGlzRm9ybSA/IHsgbWF4RGF0ZTogeyBjb250cm9sOiBtYXhJbnB1dCwgdmFsdWU6IG1heElucHV0LnZhbHVlIH0gfSA6IHsgbWF4RGF0ZTogeyB2YWx1ZTogbWF4VmFsdWUsIGNvbnRyb2w6IHVuZGVmaW5lZCB9IH0pO1xuICB9O1xufTtcbiJdfQ==