@shopify/react-form-state
Version:
Manage react forms tersely and type-safe with no magic.
144 lines (143 loc) • 4.85 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var utilities_1 = require("./utilities");
function lengthMoreThan(length) {
return function (input) { return input.length > length; };
}
exports.lengthMoreThan = lengthMoreThan;
function lengthLessThan(length) {
return function (input) { return input.length < length; };
}
exports.lengthLessThan = lengthLessThan;
function isNumericString(input) {
return input !== '' && (input.match(/[^0-9.,]/g) || []).length === 0;
}
exports.isNumericString = isNumericString;
function isEmpty(input) {
// eslint-disable-next-line no-undefined
return input === null || input === undefined || input.length === 0;
}
exports.isEmpty = isEmpty;
function isEmptyString(input) {
return input.trim().length < 1;
}
exports.isEmptyString = isEmptyString;
function not(fn) {
return function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
return !fn.apply(void 0, tslib_1.__spread(args));
};
}
exports.not = not;
function validateNested(validatorDictionary) {
// eslint-disable-next-line consistent-return
return function (input, fields) {
var errors = utilities_1.mapObject(input, function (value, field) {
var validate = validatorDictionary[field];
if (validate == null) {
return null;
}
if (typeof validate === 'function') {
return validate(value, fields);
}
if (!Array.isArray(validate)) {
// eslint-disable-next-line consistent-return
return;
}
var errors = validate
.map(function (validator) { return validator(value, fields); })
.filter(function (input) { return input != null; });
if (errors.length === 0) {
// eslint-disable-next-line consistent-return
return;
}
return errors;
});
var anyErrors = Object.keys(errors)
.map(function (key) { return errors[key]; })
.some(function (value) { return value != null; });
if (anyErrors) {
return errors;
}
};
}
exports.validateNested = validateNested;
function validateList(validatorDictionary) {
var validateItem = validateNested(validatorDictionary);
// eslint-disable-next-line consistent-return
return function (input, fields) {
var errors = input.map(function (item) { return validateItem(item, fields); });
if (errors.some(function (error) { return error != null; })) {
return errors;
}
};
}
exports.validateList = validateList;
function validate(matcher, errorContent) {
return function (input, fields) {
var matches = matcher(input, fields);
/*
always mark empty fields valid to match Polaris guidelines
https://polaris.shopify.com/patterns/error-messages#section-form-validation
*/
if (isEmpty(input)) {
return;
}
if (matches) {
return;
}
if (typeof errorContent === 'function') {
// eslint-disable-next-line consistent-return
return errorContent(toString(input));
}
// eslint-disable-next-line consistent-return
return errorContent;
};
}
exports.validate = validate;
function validateRequired(matcher, errorContent) {
return function (input, fields) {
var matches = matcher(input, fields);
if (matches) {
return;
}
if (typeof errorContent === 'function') {
// eslint-disable-next-line consistent-return
return errorContent(toString(input));
}
// eslint-disable-next-line consistent-return
return errorContent;
};
}
exports.validateRequired = validateRequired;
var validators = {
lengthMoreThan: function (length, errorContent) {
return validate(lengthMoreThan(length), errorContent);
},
lengthLessThan: function (length, errorContent) {
return validate(lengthLessThan(length), errorContent);
},
numericString: function (errorContent) {
return validate(isNumericString, errorContent);
},
nonNumericString: function (errorContent) {
return validate(not(isNumericString), errorContent);
},
requiredString: function (errorContent) {
return validateRequired(not(isEmptyString), errorContent);
},
required: function (errorContent) {
return validateRequired(not(isEmpty), errorContent);
},
};
function toString(obj) {
if (obj == null) {
return '';
}
return obj.toString();
}
exports.default = validators;