glass-app-manager
Version:
Informatica's Glass Framework CLI for bootstrapping
46 lines (32 loc) • 1.26 kB
JavaScript
// @flow
import * as React from "react";
import hoist from "hoist-non-react-statics";
import i18n from "../../utils/i18n";
import type { TranslationContextType } from "./translationTypes";
const DEFAULT_CONFIG: TranslationContextType = {
locale: "en",
fallbackLanguages: ["en"],
};
const translationProvider = i18n.init();
export const TranslationContext = React.createContext<TranslationContextType>({});
export const t = translationProvider.t.bind(translationProvider);
const WrapComponent = (Component: React.AbstractComponent<any>, Context: any, config: TranslationContextType) => (
props: any
) => (
<Context.Provider value={config}>
<Component {...props} />
</Context.Provider>
);
const withTranslation = (config: TranslationContextType) => {
translationProvider.setLocale(config.locale);
function withTranslation(BaseComponent: React.AbstractComponent<any>) {
const WrappedComponent = WrapComponent(BaseComponent, TranslationContext, {
...DEFAULT_CONFIG,
...config,
});
hoist(WrappedComponent, BaseComponent);
return WrappedComponent;
}
return withTranslation;
};
export default withTranslation;