Spaces:
Runtime error
Runtime error
| 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); | |