redux-form-validators
Version:
Simple validations with redux-form / react-final-form
99 lines (80 loc) • 2.34 kB
JavaScript
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var _messages = _interopRequireDefault(require("./messages"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
var DEFAULT_OPTIONS = {
memoize: true,
allowBlank: false,
urlProtocols: ['http', 'https'],
dateFormat: 'yyyy-mm-dd',
// ISO
dateYmd: 'ymd',
accept: ['1', 'true'],
caseSensitive: true // confirmation, inclusion, exclusion
};
var Validators = {
formatMessage: formatMessage,
formatSize: formatSize,
defaultOptions: DEFAULT_OPTIONS,
messages: _messages["default"],
pluralRules: {
0: 'zero',
1: 'one'
}
};
var _default = Validators;
exports["default"] = _default;
function formatSize(size, unit) {
return size + ' ' + unit;
}
function formatMessage(msg) {
if (msg.props) {
msg = msg.props;
}
var text = msg.defaultMessage || msg.id ||
/* istanbul ignore next */
'';
var rules = Validators.pluralRules;
return !msg.values ? text : parseMsg(text, function (part) {
var parts = part.split(',');
var count = msg.values[parts[0]]; // {value} OR {count, number}
if (parts.length <= 2) {
return count == null ? '' : '' + count;
} // plural
var plural = parts.slice(2).join(',').trim();
var info = {};
var result = parseMsg(plural, null, rules[+count] || 'other', info);
return info.found ? result : parseMsg(plural, null, 'other', {});
});
}
function parseMsg(msg, func, pattern, info) {
var start = msg.indexOf('{');
if (start < 0) return pattern ? '' : msg;
var index = start;
var count = 1;
var len = msg.length;
while (count > 0 && index < len) {
++index;
if (msg.charAt(index) === '{') {
++count;
}
if (msg.charAt(index) === '}') {
--count;
}
}
if (pattern) {
if (pattern === msg.slice(0, start).trim()) {
info.found = true;
return msg.slice(start + 1, index).trim();
}
return parseMsg(msg.slice(index + 1), null, pattern, info);
} // func gets all '{.*}' parts
// e.g:
// - {count}
// - {count, plural, one {1 thing} other {many things}}
// - ...
return msg.slice(0, start) + parseMsg(func(msg.slice(start + 1, index).trim()), func) + parseMsg(msg.slice(index + 1), func);
}
;