react-material-ui-form
Version:
State and validation management for Material-UI form components
101 lines (81 loc) • 3.44 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.validators = exports.messageMap = exports.constants = exports.validate = exports.createValidation = undefined;
var _lodash = require('lodash');
var _lodash2 = _interopRequireDefault(_lodash);
var _messageMap = require('./messageMap');
var _messageMap2 = _interopRequireDefault(_messageMap);
var _validators = require('./validators');
var _validators2 = _interopRequireDefault(_validators);
var _constants = require('./constants');
var _constants2 = _interopRequireDefault(_constants);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function sprintf(str, args) {
var predicate = void 0;
if (_lodash2.default.isString(args)) {
predicate = args;
} else if (_lodash2.default.isObject(args) && !_lodash2.default.isArray(args)) {
args = Object.values(args);
predicate = function predicate(match, number) {
return args[number] !== undefined ? args[number] : match;
};
} else {
predicate = function predicate(match, number) {
return (
// eslint-disable-next-line no-nested-ternary
args[number] !== undefined ? _lodash2.default.isArray(args) ? args.join(', ') : args[number] : match
);
};
}
return str.replace(/{(\d+)}/g, predicate);
}
var validationMessageMap = _lodash2.default.clone(_messageMap2.default);
var createValidation = exports.createValidation = function createValidation(validatorName, args, config) {
if (!_lodash2.default.isEmpty(config.messageMap)) {
validationMessageMap = config.messageMap;
}
var code = validatorName;
// first check if prefix code exists
if (!validatorName.startsWith(config.messageMapKeyPrefix)) {
var prefixedCode = '' + config.messageMapKeyPrefix + validatorName;
if (_lodash2.default.has(validationMessageMap, prefixedCode)) {
code = prefixedCode;
}
}
var message = validationMessageMap[code];
if (message !== undefined && (_lodash2.default.isNumber(args) || !_lodash2.default.isEmpty(args))) {
message = sprintf(message, args);
}
return { code: code, message: message };
};
var validate = exports.validate = function validate(value, fieldValidators, config) {
var validations = [];
if (!_lodash2.default.isArray(fieldValidators) || _lodash2.default.isEmpty(fieldValidators)) {
return [];
}
fieldValidators.forEach(function (validator) {
var args = void 0;
var validatorName = validator;
if (_lodash2.default.isObject(validator) && _lodash2.default.size(validator) === 1) {
args = Object.values(validator)[0]; // eslint-disable-line prefer-destructuring
validatorName = Object.keys(validator)[0]; // eslint-disable-line prefer-destructuring
} else if (!_lodash2.default.isString(validator)) {
console.error('invalid validator:', validator); // eslint-disable-line
}
if (config.validators[validatorName] === undefined) {
console.error('undefined validator:', validatorName); // eslint-disable-line
} else {
value = String(value);
var validation = config.validators[validatorName](value, args);
if (!validation) {
validations.push(createValidation(validatorName, args, config));
}
}
});
return validations;
};
exports.constants = _constants2.default;
exports.messageMap = _messageMap2.default;
exports.validators = _validators2.default;