penguinmod-editor-2 / src /containers /language-selector.jsx
soiz1's picture
Upload 2891 files
6bcb42f verified
import bindAll from 'lodash.bindall';
import PropTypes from 'prop-types';
import React from 'react';
import {connect} from 'react-redux';
import {selectLocale} from '../reducers/locales';
import {closeLanguageMenu} from '../reducers/menus';
import LanguageSelectorComponent from '../components/language-selector/language-selector.jsx';
class LanguageSelector extends React.Component {
constructor (props) {
super(props);
bindAll(this, [
'handleChange'
]);
document.documentElement.lang = props.currentLocale;
}
handleChange (e) {
const newLocale = e.target.value;
if (this.props.messagesByLocale[newLocale]) {
this.props.onChangeLanguage(newLocale);
document.documentElement.lang = newLocale;
}
}
render () {
const {
onChangeLanguage, // eslint-disable-line no-unused-vars
messagesByLocale, // eslint-disable-line no-unused-vars
children,
...props
} = this.props;
return (
<LanguageSelectorComponent
onChange={this.handleChange}
{...props}
>
{children}
</LanguageSelectorComponent>
);
}
}
LanguageSelector.propTypes = {
children: PropTypes.node,
currentLocale: PropTypes.string.isRequired,
// Only checking key presence for messagesByLocale, no need to be more specific than object
messagesByLocale: PropTypes.object, // eslint-disable-line react/forbid-prop-types
onChangeLanguage: PropTypes.func.isRequired
};
const mapStateToProps = state => ({
currentLocale: state.locales.locale,
messagesByLocale: state.locales.messagesByLocale
});
const mapDispatchToProps = dispatch => ({
onChangeLanguage: locale => {
dispatch(selectLocale(locale));
dispatch(closeLanguageMenu());
}
});
export default connect(
mapStateToProps,
mapDispatchToProps
)(LanguageSelector);