UNPKG

@shopify/react-form-state

Version:
144 lines (143 loc) 4.85 kB
"use strict"; 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;