UNPKG

@kineticdata/react

Version:
179 lines (178 loc) 5.99 kB
"use strict"; var _interopRequireWildcard3 = require("@babel/runtime/helpers/interopRequireWildcard")["default"]; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"]; Object.defineProperty(exports, "__esModule", { value: true }); exports.mapStateToProps = exports.importLocale = exports.Moment = void 0; var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/createClass")); var _assertThisInitialized2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/assertThisInitialized")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/inherits")); var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/createSuper")); var _interopRequireWildcard2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/interopRequireWildcard")); var _react = _interopRequireWildcard3(require("react")); var _reactRedux = require("react-redux"); var _moment = _interopRequireDefault(require("moment")); var _I18nContext = require("./I18nContext"); var TIME_AGO_INTERVAL = 10000; var mapJavaLocalesToISO639 = function mapJavaLocalesToISO639(locale) { switch (locale) { case 'in': case 'in-ID': return 'id'; case 'iw': case 'iw-IL': return 'he'; case 'no': case 'no-NO': return 'nb'; case 'no-NO-NY': return 'nn'; case 'zh': case 'zh-SG': return 'zh-cn'; default: return locale; } }; var importLocale = exports.importLocale = function importLocale(locale, success) { var code = mapJavaLocalesToISO639(locale); if (!code || code === 'en') { _moment["default"].locale(code); if (typeof success === 'function') { success(); } } else { (function (specifier) { return new Promise(function (r) { return r(specifier); }).then(function (s) { return (0, _interopRequireWildcard2["default"])(require(s)); }); })("moment/locale/".concat(code))["catch"](function (error) { var localeAncestor = code.match(/(.+)-..$/); if (localeAncestor && localeAncestor[1]) { importLocale(localeAncestor[1], success); } else { console.warn('Locale could not be found.', error); } }).then(function () { _moment["default"].locale(code); if (typeof success === 'function') { success(); } }); } }; var MomentComponent = /*#__PURE__*/function (_Component) { (0, _inherits2["default"])(MomentComponent, _Component); var _super = (0, _createSuper2["default"])(MomentComponent); function MomentComponent(props) { var _this; (0, _classCallCheck2["default"])(this, MomentComponent); _this = _super.call(this, props); _this.state = {}; _this.tick = _this.tick.bind((0, _assertThisInitialized2["default"])(_this)); return _this; } (0, _createClass2["default"])(MomentComponent, [{ key: "componentDidMount", value: function componentDidMount() { var _this2 = this; importLocale(this.props.locale, function () { return _this2.setState({ locale: _this2.props.locale }); }); if (this.props.fromNow) { this.interval = setInterval(this.tick, TIME_AGO_INTERVAL); } } }, { key: "componentDidUpdate", value: function componentDidUpdate(prevProps) { var _this3 = this; if (this.props.locale && this.props.locale !== prevProps.locale) { importLocale(this.props.locale, function () { return _this3.setState({ locale: _this3.props.locale }); }); } } }, { key: "componentWillUnmount", value: function componentWillUnmount() { clearInterval(this.interval); } }, { key: "tick", value: function tick() { this.setState(this.state); } }, { key: "render", value: function render() { if (this.props.locale) { if (this.state.locale) { if (typeof this.props.render === 'function') { return this.props.render(format(this.state.locale), this.state.locale); } else { return format(this.state.locale)(this.props.timestamp, this.props.format); } } else { // If locale language is not yet loaded, don't render anything return null; } } else { // If locale is not set at app level, return without localizing return format()(this.props.timestamp, this.props.format); } } }]); return MomentComponent; }(_react.Component); var format = function format(locale) { return function (timestamp, format) { var formatFn = format === 'fromNow' ? function (m) { return m.fromNow(); } : function (m) { return m.format(format ? Moment.formats[format] || format : Moment.formats.dateTime); }; if (locale) { return formatFn((0, _moment["default"])(timestamp).locale(locale)); } else { return formatFn((0, _moment["default"])(timestamp)); } }; }; var mapStateToProps = exports.mapStateToProps = function mapStateToProps(state) { return { locale: state.app.config.locale }; }; var Moment = exports.Moment = function Moment(props) { return /*#__PURE__*/_react["default"].createElement(_I18nContext.I18nContext.Consumer, null, function (_ref) { var locale = _ref.locale; return /*#__PURE__*/_react["default"].createElement(MomentComponent, Object.assign({ locale: locale }, props)); }); }; (0, _reactRedux.connect)(mapStateToProps)(MomentComponent); Moment.formats = { time: 'LT', timeWithSeconds: 'LTS', date: 'LL', dateWithDay: 'dddd, LL', dateNumeric: 'L', dateShort: 'll', dateWithDayShort: 'ddd, ll', dateTime: 'LLL', dateTimeWithSeconds: 'LL LTS', dateTimeNumeric: 'L LT', dateTimeShort: 'lll', dateTimeWithDay: 'LLLL', dateTimeWithDayShort: 'llll' };