Skip to content
Snippets Groups Projects
Commit c7370481 authored by Jessie Keck's avatar Jessie Keck
Browse files

Allow language to configured and pass it to App as a prop.

parent cab23b10
Branches
Tags
No related merge requests found
...@@ -13,6 +13,7 @@ import i18n from '../../../src/i18n'; ...@@ -13,6 +13,7 @@ import i18n from '../../../src/i18n';
function createWrapper(props) { function createWrapper(props) {
return shallow( return shallow(
<App <App
language="en"
isFullscreenEnabled={false} isFullscreenEnabled={false}
isWorkspaceControlPanelVisible isWorkspaceControlPanelVisible
setWorkspaceFullscreen={() => {}} setWorkspaceFullscreen={() => {}}
...@@ -80,4 +81,14 @@ describe('App', () => { ...@@ -80,4 +81,14 @@ describe('App', () => {
expect(wrapper.find(Workspace).length).toBe(0); expect(wrapper.find(Workspace).length).toBe(0);
expect(wrapper.find(WorkspaceAdd).length).toBe(1); expect(wrapper.find(WorkspaceAdd).length).toBe(1);
}); });
describe('componentDidUpdate()', () => {
it('changes the i18n language if the language prop has been updated', () => {
const wrapper = createWrapper();
expect(i18n.language).toEqual('en');
wrapper.setProps({ language: 'de' });
expect(i18n.language).toEqual('de');
});
});
}); });
...@@ -15,6 +15,33 @@ import i18n from '../i18n'; ...@@ -15,6 +15,33 @@ import i18n from '../i18n';
* @prop {Object} manifests * @prop {Object} manifests
*/ */
class App extends Component { class App extends Component {
/** */
constructor(props) {
super(props);
this.i18n = i18n;
}
/**
* Set i18n language on component mount
*/
componentDidMount() {
const { language } = this.props;
this.i18n.changeLanguage(language);
}
/**
* Update the i18n language if it is changed
*/
componentDidUpdate(prevProps) {
const { language } = this.props;
if (prevProps.language !== language) {
this.i18n.changeLanguage(language);
}
}
/** /**
* render * render
* @return {String} - HTML markup for the component * @return {String} - HTML markup for the component
...@@ -26,12 +53,12 @@ class App extends Component { ...@@ -26,12 +53,12 @@ class App extends Component {
} = this.props; } = this.props;
Object.keys(translations).forEach((lng) => { Object.keys(translations).forEach((lng) => {
i18n.addResourceBundle(lng, 'translation', translations[lng], true, true); this.i18n.addResourceBundle(lng, 'translation', translations[lng], true, true);
}); });
return ( return (
<div className={classNames(classes.background, ns('app'))}> <div className={classNames(classes.background, ns('app'))}>
<I18nextProvider i18n={i18n}> <I18nextProvider i18n={this.i18n}>
<MuiThemeProvider theme={createMuiTheme(theme)}> <MuiThemeProvider theme={createMuiTheme(theme)}>
<Fullscreen <Fullscreen
enabled={isFullscreenEnabled} enabled={isFullscreenEnabled}
...@@ -55,6 +82,7 @@ class App extends Component { ...@@ -55,6 +82,7 @@ class App extends Component {
} }
App.propTypes = { App.propTypes = {
language: PropTypes.string.isRequired,
theme: PropTypes.object.isRequired, // eslint-disable-line react/forbid-prop-types theme: PropTypes.object.isRequired, // eslint-disable-line react/forbid-prop-types
translations: PropTypes.object.isRequired, // eslint-disable-line react/forbid-prop-types translations: PropTypes.object.isRequired, // eslint-disable-line react/forbid-prop-types
isFullscreenEnabled: PropTypes.bool, isFullscreenEnabled: PropTypes.bool,
......
...@@ -10,6 +10,7 @@ export default { ...@@ -10,6 +10,7 @@ export default {
useNextVariants: true // set so that console deprecation warning is removed useNextVariants: true // set so that console deprecation warning is removed
} }
}, },
language: 'en',
translations: { translations: {
}, },
window: { window: {
......
...@@ -11,6 +11,7 @@ import App from '../components/App'; ...@@ -11,6 +11,7 @@ import App from '../components/App';
*/ */
const mapStateToProps = state => ( const mapStateToProps = state => (
{ {
language: state.config.language,
theme: state.config.theme, theme: state.config.theme,
translations: state.config.translations, translations: state.config.translations,
isFullscreenEnabled: state.workspace.isFullscreenEnabled, isFullscreenEnabled: state.workspace.isFullscreenEnabled,
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment