UNPKG

@kineticdata/react

Version:
110 lines (109 loc) 4.83 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault")["default"]; Object.defineProperty(exports, "__esModule", { value: true }); exports.I18nProvider = void 0; var _objectSpread2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/objectSpread2")); var _classCallCheck2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/classCallCheck")); var _createClass2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/createClass")); var _inherits2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/inherits")); var _createSuper2 = _interopRequireDefault(require("@babel/runtime/helpers/esm/createSuper")); var _react = _interopRequireDefault(require("react")); var _immutable = require("immutable"); var _helpers = require("../../../helpers"); var _I18nContext = require("./I18nContext"); var _translations = require("../../../apis/core/translations"); var I18nProvider = exports.I18nProvider = /*#__PURE__*/function (_React$Component) { (0, _inherits2["default"])(I18nProvider, _React$Component); var _super = (0, _createSuper2["default"])(I18nProvider); function I18nProvider(props) { var _this; (0, _classCallCheck2["default"])(this, I18nProvider); _this = _super.call(this, props); _this.populateBundleTranslations = function (locale) { _helpers.bundle.config.translations = (0, _objectSpread2["default"])((0, _objectSpread2["default"])({}, _helpers.bundle.config.translations), _this.state.translations.get(locale).toJS()); _helpers.bundle.config.translationsLocale = locale; }; _this.loadTranslations = function (locale, context, isPublic) { if (!_this.loading.hasIn([locale, context])) { _this.loading = _this.loading.setIn([locale, context], true); // check to see if the translation context was already loaded by the CE // client-side code (like if K.load is used in a form event) (0, _translations.fetchTranslations)({ cache: true, contextName: context, localeCode: locale, "public": isPublic }).then(function (_ref) { var error = _ref.error, entries = _ref.entries; if (entries) { _this.setState(function (state) { return { translations: state.translations.setIn([locale, context], (0, _immutable.Map)(entries.map(function (entry) { return [entry.key, entry.value]; }))) }; }); } else { _this.setState(function (state) { return { translations: state.translations.setIn([locale, context], (0, _immutable.Map)()) }; }); } }); } else if (locale !== _helpers.bundle.config.translationsLocale && _this.state.translations.has(locale)) { // If the context is already loaded for the locale but we're loading due // to the locale changing then we need to populate the bundle's // translation config from the already-loaded translations. _this.populateBundleTranslations(locale); } }; _this.state = { translations: (0, _immutable.Map)() }; _this.loading = (0, _immutable.Map)(); // this effectively enables translations for the CE client-side code _helpers.bundle.config = _helpers.bundle.config || {}; _helpers.bundle.config.translations = _helpers.bundle.config.translations || {}; _helpers.bundle.config.translationsLocale = props.locale; return _this; } (0, _createClass2["default"])(I18nProvider, [{ key: "componentDidMount", value: function componentDidMount() { if (this.props.locale) { this.loadTranslations(this.props.locale, 'shared', true); } } }, { key: "componentDidUpdate", value: function componentDidUpdate(prevProps, prevState) { if (prevProps.locale !== this.props.locale) { this.loadTranslations(this.props.locale, 'shared', true); } if (!this.state.translations.equals(prevState.translations) && this.state.translations.get(this.props.locale) && _helpers.bundle.config) { this.populateBundleTranslations(this.props.locale); } } }, { key: "render", value: function render() { if (this.state.translations) { return /*#__PURE__*/_react["default"].createElement(_I18nContext.I18nContext.Provider, { value: { context: this.props.context || 'shared', locale: this.props.locale || 'en', translations: this.state.translations, loadTranslations: this.loadTranslations } }, this.props.children); } else { return null; } } }]); return I18nProvider; }(_react["default"].Component);