ngx-custom-validators
Version:
Angular custom directives for validation
45 lines • 5.86 kB
JavaScript
import { FormControl, NgModel, Validators } from '@angular/forms';
import { isDate, isPresent, parseDate } from '../util/lang';
export const minDate = (minInput) => {
let value;
let subscribe = false;
let minValue = minInput;
const isForm = minInput instanceof FormControl || minInput instanceof NgModel;
return (control) => {
if (!subscribe && isForm) {
subscribe = true;
minInput.valueChanges.subscribe(() => {
control.updateValueAndValidity();
});
}
if (isForm) {
minValue = minInput.value;
}
value = parseDate(minValue);
if (!isDate(value) && !(value instanceof Function)) {
if (value == null) {
return null;
}
else if (isForm) {
return { minDate: { error: 'minDate is invalid' } };
}
else {
throw Error('minDate 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 ? { minDate: { control: minInput, value: minInput.value } } : { minDate: { value: minValue, control: undefined } });
};
};
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9yLmpzIiwic291cmNlUm9vdCI6Ii4uLy4uLy4uLyIsInNvdXJjZXMiOlsic3JjL2FwcC9taW4tZGF0ZS92YWxpZGF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFtQixXQUFXLEVBQUUsT0FBTyxFQUFpQyxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNsSCxPQUFPLEVBQUUsTUFBTSxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxjQUFjLENBQUM7QUFFNUQsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLENBQUMsUUFBYSxFQUFlLEVBQUU7SUFDcEQsSUFBSSxLQUFLLENBQUM7SUFDVixJQUFJLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDdEIsSUFBSSxRQUFRLEdBQUcsUUFBUSxDQUFDO0lBQ3hCLE1BQU0sTUFBTSxHQUFHLFFBQVEsWUFBWSxXQUFXLElBQUksUUFBUSxZQUFZLE9BQU8sQ0FBQztJQUM5RSxPQUFPLENBQUMsT0FBd0IsRUFBb0IsRUFBRTtRQUVwRCxJQUFJLENBQUMsU0FBUyxJQUFJLE1BQU0sRUFBRTtZQUN4QixTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ2pCLFFBQVEsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRTtnQkFDbkMsT0FBTyxDQUFDLHNCQUFzQixFQUFFLENBQUM7WUFDbkMsQ0FBQyxDQUFDLENBQUM7U0FDSjtRQUVELElBQUksTUFBTSxFQUFFO1lBQ1YsUUFBUSxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUM7U0FDM0I7UUFFRCxLQUFLLEdBQUcsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBRTVCLElBQUksQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDLElBQUksQ0FBQyxDQUFDLEtBQUssWUFBWSxRQUFRLENBQUMsRUFBRTtZQUNsRCxJQUFJLEtBQUssSUFBSSxJQUFJLEVBQUU7Z0JBQ2pCLE9BQU8sSUFBSSxDQUFDO2FBQ2I7aUJBQU0sSUFBSSxNQUFNLEVBQUU7Z0JBQ2pCLE9BQU8sRUFBRSxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsb0JBQW9CLEVBQUUsRUFBRSxDQUFDO2FBQ3JEO2lCQUFNO2dCQUNMLE1BQU0sS0FBSyxDQUFDLGtEQUFrRCxDQUFDLENBQUM7YUFDakU7U0FDRjtRQUVELElBQUksU0FBUyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQUMsRUFBRTtZQUMzQyxPQUFPLElBQUksQ0FBQztTQUNiO1FBRUQsTUFBTSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRXZELElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUU7WUFDZCxPQUFPLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxDQUFDO1NBQ3hCO1FBQ0QsSUFBSSxLQUFLLFlBQVksUUFBUSxFQUFFO1lBQzdCLEtBQUssR0FBRyxLQUFLLEVBQUUsQ0FBQztTQUNqQjtRQUVELE9BQU8sQ0FBQyxJQUFJLElBQUksSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLE9BQU8sRUFBRTtZQUNuQyxDQUFDLENBQUMsSUFBSTtZQUNOLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssRUFBRSxRQUFRLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsRUFBRSxLQUFLLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbEksQ0FBQyxDQUFDO0FBQ0osQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQWJzdHJhY3RDb250cm9sLCBGb3JtQ29udHJvbCwgTmdNb2RlbCwgVmFsaWRhdGlvbkVycm9ycywgVmFsaWRhdG9yRm4sIFZhbGlkYXRvcnMgfSBmcm9tICdAYW5ndWxhci9mb3Jtcyc7XG5pbXBvcnQgeyBpc0RhdGUsIGlzUHJlc2VudCwgcGFyc2VEYXRlIH0gZnJvbSAnLi4vdXRpbC9sYW5nJztcblxuZXhwb3J0IGNvbnN0IG1pbkRhdGUgPSAobWluSW5wdXQ6IGFueSk6IFZhbGlkYXRvckZuID0+IHtcbiAgbGV0IHZhbHVlO1xuICBsZXQgc3Vic2NyaWJlID0gZmFsc2U7XG4gIGxldCBtaW5WYWx1ZSA9IG1pbklucHV0O1xuICBjb25zdCBpc0Zvcm0gPSBtaW5JbnB1dCBpbnN0YW5jZW9mIEZvcm1Db250cm9sIHx8IG1pbklucHV0IGluc3RhbmNlb2YgTmdNb2RlbDtcbiAgcmV0dXJuIChjb250cm9sOiBBYnN0cmFjdENvbnRyb2wpOiBWYWxpZGF0aW9uRXJyb3JzID0+IHtcblxuICAgIGlmICghc3Vic2NyaWJlICYmIGlzRm9ybSkge1xuICAgICAgc3Vic2NyaWJlID0gdHJ1ZTtcbiAgICAgIG1pbklucHV0LnZhbHVlQ2hhbmdlcy5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICBjb250cm9sLnVwZGF0ZVZhbHVlQW5kVmFsaWRpdHkoKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGlmIChpc0Zvcm0pIHtcbiAgICAgIG1pblZhbHVlID0gbWluSW5wdXQudmFsdWU7XG4gICAgfVxuXG4gICAgdmFsdWUgPSBwYXJzZURhdGUobWluVmFsdWUpO1xuXG4gICAgaWYgKCFpc0RhdGUodmFsdWUpICYmICEodmFsdWUgaW5zdGFuY2VvZiBGdW5jdGlvbikpIHtcbiAgICAgIGlmICh2YWx1ZSA9PSBudWxsKSB7XG4gICAgICAgIHJldHVybiBudWxsO1xuICAgICAgfSBlbHNlIGlmIChpc0Zvcm0pIHtcbiAgICAgICAgcmV0dXJuIHsgbWluRGF0ZTogeyBlcnJvcjogJ21pbkRhdGUgaXMgaW52YWxpZCcgfSB9O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgdGhyb3cgRXJyb3IoJ21pbkRhdGUgdmFsdWUgbXVzdCBiZSBvciByZXR1cm4gYSBmb3JtYXR0ZWQgZGF0ZScpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpc1ByZXNlbnQoVmFsaWRhdG9ycy5yZXF1aXJlZChjb250cm9sKSkpIHtcbiAgICAgIHJldHVybiBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGQgPSBuZXcgRGF0ZShwYXJzZURhdGUoY29udHJvbC52YWx1ZSkpLmdldFRpbWUoKTtcblxuICAgIGlmICghaXNEYXRlKGQpKSB7XG4gICAgICByZXR1cm4geyB2YWx1ZTogdHJ1ZSB9O1xuICAgIH1cbiAgICBpZiAodmFsdWUgaW5zdGFuY2VvZiBGdW5jdGlvbikge1xuICAgICAgdmFsdWUgPSB2YWx1ZSgpO1xuICAgIH1cblxuICAgIHJldHVybiBkID49IG5ldyBEYXRlKHZhbHVlKS5nZXRUaW1lKClcbiAgICAgID8gbnVsbFxuICAgICAgOiAoaXNGb3JtID8geyBtaW5EYXRlOiB7IGNvbnRyb2w6IG1pbklucHV0LCB2YWx1ZTogbWluSW5wdXQudmFsdWUgfSB9IDogeyBtaW5EYXRlOiB7IHZhbHVlOiBtaW5WYWx1ZSwgY29udHJvbDogdW5kZWZpbmVkIH0gfSk7XG4gIH07XG59O1xuIl19