react-widgets
Version:
An à la carte set of polished, extensible, and accessible inputs built for React
164 lines (127 loc) • 5.62 kB
JavaScript
;
var babelHelpers = require('./babelHelpers.js');
exports.__esModule = true;
exports.setNumber = setNumber;
exports.setDate = setDate;
var _invariant = require('invariant');
var _invariant2 = babelHelpers.interopRequireDefault(_invariant);
var _ = require('./_');
var _react = require('react');
var _react2 = babelHelpers.interopRequireDefault(_react);
var localePropType = _react2['default'].PropTypes.oneOfType([_react2['default'].PropTypes.string, _react2['default'].PropTypes.func]);
var REQUIRED_NUMBER_FORMATS = ['default'];
var REQUIRED_DATE_FORMATS = ['default', 'date', 'time', 'header', 'footer', 'dayOfMonth', 'month', 'year', 'decade', 'century'];
function _format(localizer, formatter, value, format, culture) {
var result = typeof format === 'function' ? format(value, culture, localizer) : formatter.call(localizer, value, format, culture);
_invariant2['default'](result == null || typeof result === 'string', '`localizer format(..)` must return a string, null, or undefined');
return result;
}
function checkFormats(requiredFormats, formats) {
if (process.env.NODE_ENV !== 'production') requiredFormats.forEach(function (f) {
return _invariant2['default'](_.has(formats, f), 'localizer missing required format: `%s`', f);
});
}
var _numberLocalizer = createWrapper('NumberPicker');
function setNumber(_ref) {
var _format2 = _ref.format;
var _parse = _ref.parse;
var _ref$precision = _ref.precision;
var precision = _ref$precision === undefined ? function () {
return null;
} : _ref$precision;
var formats = _ref.formats;
var propType = _ref.propType;
_invariant2['default'](typeof _format2 === 'function', 'number localizer `format(..)` must be a function');
_invariant2['default'](typeof _parse === 'function', 'number localizer `parse(..)` must be a function');
checkFormats(REQUIRED_NUMBER_FORMATS, formats);
_numberLocalizer = {
formats: formats,
precision: precision,
propType: propType || localePropType,
format: function format(value, str, culture) {
return _format(this, _format2, value, str, culture);
},
parse: function parse(value, culture) {
var result = _parse.call(this, value, culture);
_invariant2['default'](result == null || typeof result === 'number', 'number localizer `parse(..)` must return a number, null, or undefined');
return result;
}
};
}
var _dateLocalizer = createWrapper('DateTimePicker');
function setDate(spec) {
_invariant2['default'](typeof spec.format === 'function', 'date localizer `format(..)` must be a function');
_invariant2['default'](typeof spec.parse === 'function', 'date localizer `parse(..)` must be a function');
_invariant2['default'](typeof spec.firstOfWeek === 'function', 'date localizer `firstOfWeek(..)` must be a function');
checkFormats(REQUIRED_DATE_FORMATS, spec.formats);
_dateLocalizer = {
formats: spec.formats,
propType: spec.propType || localePropType,
startOfWeek: spec.firstOfWeek,
format: function format(value, str, culture) {
return _format(this, spec.format, value, str, culture);
},
parse: function parse(value, culture) {
var result = spec.parse.call(this, value, culture);
_invariant2['default'](result == null || result instanceof Date && !isNaN(result.getTime()), 'date localizer `parse(..)` must return a valid Date, null, or undefined');
return result;
}
};
}
var number = {
propType: function propType() {
var _numberLocalizer2;
return (_numberLocalizer2 = _numberLocalizer).propType.apply(_numberLocalizer2, arguments);
},
getFormat: function getFormat(key, format) {
return format || _numberLocalizer.formats[key];
},
parse: function parse() {
var _numberLocalizer3;
return (_numberLocalizer3 = _numberLocalizer).parse.apply(_numberLocalizer3, arguments);
},
format: function format() {
var _numberLocalizer4;
return (_numberLocalizer4 = _numberLocalizer).format.apply(_numberLocalizer4, arguments);
},
precision: function precision() {
var _numberLocalizer5;
return (_numberLocalizer5 = _numberLocalizer).precision.apply(_numberLocalizer5, arguments);
}
};
exports.number = number;
var date = {
propType: function propType() {
var _dateLocalizer2;
return (_dateLocalizer2 = _dateLocalizer).propType.apply(_dateLocalizer2, arguments);
},
getFormat: function getFormat(key, format) {
return format || _dateLocalizer.formats[key];
},
parse: function parse() {
var _dateLocalizer3;
return (_dateLocalizer3 = _dateLocalizer).parse.apply(_dateLocalizer3, arguments);
},
format: function format() {
var _dateLocalizer4;
return (_dateLocalizer4 = _dateLocalizer).format.apply(_dateLocalizer4, arguments);
},
startOfWeek: function startOfWeek() {
var _dateLocalizer5;
return (_dateLocalizer5 = _dateLocalizer).startOfWeek.apply(_dateLocalizer5, arguments);
}
};
exports.date = date;
exports['default'] = { number: number, date: date };
function createWrapper() {
var dummy = {};
['formats', 'parse', 'format', 'firstOfWeek', 'precision'].forEach(function (name) {
return Object.defineProperty(dummy, name, {
enumerable: true,
get: function get() {
throw new Error('[React Widgets] You are attempting to use a widget that requires localization ' + '(Calendar, DateTimePicker, NumberPicker). ' + 'However there is no localizer set. Please configure a localizer. \n\n' + 'see http://jquense.github.io/react-widgets/docs/#/i18n for more info.');
}
});
});
return dummy;
}