@kineticdata/react
Version:
A React library for the Kinetic Platform
110 lines (109 loc) • 4.83 kB
JavaScript
;
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);