Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 12 additions & 1 deletion src/Uwave.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,12 @@ import { render } from 'react-dom';
import { Provider } from 'react-redux';
import { AppContainer as HotContainer } from 'react-hot-loader';
import injectTapEventPlugin from 'react-tap-event-plugin';
import createLocale from './locale';
import AppContainer from './containers/App';
import { get as readSession } from './utils/Session';
import configureStore from './store/configureStore';
import { initState, socketConnect, setJWT } from './actions/LoginActionCreators';
import { languageSelector } from './selectors/settingSelectors';
import * as api from './api';

// Register default chat commands.
Expand Down Expand Up @@ -88,13 +90,21 @@ export default class Uwave {
{ mediaSources: this.sources, socketUrl: this.options.socketUrl }
);

const localePromise = createLocale(
languageSelector(this.store.getState())
);

if (this.jwt) {
this.store.dispatch(setJWT(this.jwt));
this.jwt = null;
}

this.store.dispatch(socketConnect());
return this.store.dispatch(initState()).then(() => {
return Promise.all([
localePromise,
this.store.dispatch(initState())
]).then(([ locale ]) => {
this.locale = locale;
this.resolveReady();
});
}
Expand All @@ -104,6 +114,7 @@ export default class Uwave {
<Provider store={this.store}>
<AppContainer
mediaSources={this.sources}
locale={this.locale}
uwave={this}
/>
</Provider>
Expand Down
9 changes: 3 additions & 6 deletions src/containers/App.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,6 @@ import { connect } from 'react-redux';
import { createStructuredSelector } from 'reselect';
import MuiThemeProvider from 'material-ui/styles/MuiThemeProvider';
import { I18nextProvider } from 'react-i18next';

import createLocale from '../locale';

import { closeAll } from '../actions/OverlayActionCreators';
import { createTimer, stopTimer } from '../actions/TickerActionCreators';

Expand Down Expand Up @@ -40,6 +37,7 @@ export default class AppContainer extends React.Component {
mediaSources: PropTypes.object.isRequired,
uwave: PropTypes.object,
language: PropTypes.string,
locale: PropTypes.object.isRequired,
muiTheme: PropTypes.object,
createTimer: PropTypes.func.isRequired,
stopTimer: PropTypes.func.isRequired
Expand All @@ -64,12 +62,11 @@ export default class AppContainer extends React.Component {
// Start the clock! üWave stores the current time in the application state
// primarily to make sure that different timers in the UI update simultaneously.
this.timerCallbacks = this.props.createTimer();
this.locale = createLocale(this.props.language);
}

componentWillReceiveProps(nextProps) {
if (this.props.language !== nextProps.language) {
this.locale.changeLanguage(nextProps.language);
this.props.locale.changeLanguage(nextProps.language);
}
}

Expand All @@ -81,7 +78,7 @@ export default class AppContainer extends React.Component {
render() {
return (
<MuiThemeProvider muiTheme={this.props.muiTheme}>
<I18nextProvider i18n={this.locale}>
<I18nextProvider i18n={this.props.locale}>
<App {...this.props} />
</I18nextProvider>
</MuiThemeProvider>
Expand Down
8 changes: 5 additions & 3 deletions src/locale.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,9 +56,11 @@ export const availableLanguages = [ 'en', ...Object.keys(resources) ];

export default function createLocale(language) {
const locale = i18next.cloneInstance();
locale.changeLanguage(language);

locale.availableLanguages = availableLanguages;

return locale;
return new Promise((resolve) => {
locale.changeLanguage(language, () => {
resolve(locale);
});
});
}