sd-formik-validators
Version:
Common validators for Formik
133 lines (132 loc) • 5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var date_fns_1 = require("date-fns");
var regex_1 = require("./regex");
var composeValidators = function () {
var validators = [];
for (var _i = 0; _i < arguments.length; _i++) {
validators[_i] = arguments[_i];
}
return function (value) {
return validators.reduce(function (error, validator) { return error || validator(value); }, undefined);
};
};
exports.composeValidators = composeValidators;
// https://stackoverflow.com/questions/54443161/parse-and-format-date-in-string/54443608
var dateValidator = function (value) {
if (value) {
if (Object.prototype.toString.call(value) === '[object Date]') {
if (isNaN(value.getTime())) {
return 'Invalid Date';
}
else {
return undefined;
}
}
else {
return 'Invalid Date';
}
}
else {
return undefined;
}
};
exports.dateValidator = dateValidator;
var minDateValidator = function (minDateOptions) { return function (value) {
var minDate = minDateOptions.minDate, customMessage = minDateOptions.customMessage;
var msg = customMessage ? customMessage : "Date must be greater than minimum date.";
if (value instanceof Date) {
return date_fns_1.compareAsc(minDate, value) === 1 ? msg : undefined;
}
else if (typeof value === 'string') {
return date_fns_1.compareAsc(minDate, new Date(value)) === 1 ? msg : undefined;
}
else {
return undefined;
}
}; };
exports.minDateValidator = minDateValidator;
var maxDateValidator = function (maxDateOptions) { return function (value) {
var maxDate = maxDateOptions.maxDate, customMessage = maxDateOptions.customMessage;
var msg = customMessage ? customMessage : "Date must be greater than max date.";
if (value instanceof Date) {
return date_fns_1.compareAsc(maxDate, value) === -1 ? msg : undefined;
}
else if (typeof value === 'string') {
return date_fns_1.compareAsc(maxDate, new Date(value)) === -1 ? msg : undefined;
}
else {
return undefined;
}
}; };
exports.maxDateValidator = maxDateValidator;
var emailValidator = function (value) {
if (value === '') {
return undefined;
}
return regex_1.emailRegex.test(value) ? undefined : 'Not a valid email';
};
exports.emailValidator = emailValidator;
var honeypotValidator = function (value) {
return !value ? undefined : ' ';
};
exports.honeypotValidator = honeypotValidator;
var minLengthValidator = function (minOptions) { return function (value) {
if (!value) {
return undefined;
}
var minLength = minOptions.minLength, customMessage = minOptions.customMessage;
var msg = customMessage ? customMessage : "Field must have " + minLength + " characters.";
return value.length >= minLength ? undefined : msg;
}; };
exports.minLengthValidator = minLengthValidator;
var isSameDay = function (d1, d2) {
return d1.getFullYear() === d2.getFullYear() && d1.getMonth() === d2.getMonth() && d1.getDate() === d2.getDate();
};
var notPastDateValidator = function (value) {
if (value) {
if (Object.prototype.toString.call(value) === '[object Date]') {
if (isNaN(value.getTime())) {
return 'Invalid Date';
}
else {
if (isSameDay(new Date(), value) || date_fns_1.compareAsc(value, new Date()) === 1) {
return undefined;
}
else {
return 'Date cannot be in the past.';
}
}
}
else {
return 'Invalid Date';
}
}
};
exports.notPastDateValidator = notPastDateValidator;
var regexValidator = function (regexOptions) { return function (value) {
var regex = regexOptions.regex, message = regexOptions.message;
return regex.test(value) ? undefined : message;
}; };
exports.regexValidator = regexValidator;
var requiredValidator = function (value) {
return value ? undefined : 'Required';
};
exports.requiredValidator = requiredValidator;
var stringDateValidator = function (_a) {
var _b = _a.message, message = _b === void 0 ? 'Invalid Date' : _b, _c = _a.inputMaskToIgnore, inputMaskToIgnore = _c === void 0 ? '__/__/____' : _c;
return function (value) {
if (!value || value === inputMaskToIgnore) {
return undefined;
}
return date_fns_1.isValid(new Date(value)) ? undefined : message;
};
};
exports.stringDateValidator = stringDateValidator;
var zipValidator = function (value) {
if (value === '') {
return undefined;
}
return regex_1.zipRegex.test(value) ? undefined : 'Not a valid zip code';
};
exports.zipValidator = zipValidator;