@kineticdata/react
Version:
A React library for the Kinetic Platform
179 lines (178 loc) • 5.99 kB
JavaScript
;
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'
};