78 lines
1.8 KiB
React
Raw Normal View History

2019-09-08 15:16:27 +02:00
import React, { Component } from 'react'
import i18next from 'i18next'
2019-09-08 17:14:48 +02:00
import { connect } from 'react-redux'
2019-09-08 15:16:27 +02:00
import { ReactComponent as EnFlag } from '../../images/flags/en.svg'
import { ReactComponent as FrFlag } from '../../images/flags/fr.svg'
2019-09-08 17:14:48 +02:00
import { setLanguage } from '../../actions/index'
2019-09-08 15:16:27 +02:00
const languages = [
{
name: 'en',
selected: true,
flag: <EnFlag />,
},
{
name: 'fr',
selected: false,
flag: <FrFlag />,
},
]
class Dropdown extends Component {
constructor(props) {
super(props)
this.state = {
isOpen: false,
}
2019-09-08 15:16:27 +02:00
}
toggleDropdown() {
this.setState(prevState => ({
isOpen: !prevState.isOpen,
}))
}
render() {
2019-09-08 17:14:48 +02:00
const { isOpen } = this.state
const { language: selected, onUpdateLanguage } = this.props
2019-09-08 15:16:27 +02:00
return (
<div className="dropdown-wrapper" onClick={() => this.toggleDropdown()}>
<ul className="dropdown-list i18n-flag">
{languages
.filter(language =>
isOpen ? language : language.name === selected
)
.map(language => (
<li
2019-09-08 16:53:23 +02:00
className={`dropdown-item${
language.name === selected && isOpen
? ' dropdown-item-selected'
: ''
}`}
2019-09-08 15:16:27 +02:00
key={language.name}
2019-09-08 17:14:48 +02:00
onClick={() => onUpdateLanguage(language.name, selected)}
2019-09-08 15:16:27 +02:00
>
{language.flag} {language.name}
</li>
))}
</ul>
</div>
)
}
}
2019-09-08 17:14:48 +02:00
export default connect(
state => ({
language: state.language,
}),
dispatch => ({
onUpdateLanguage: (lang, selected) => {
if (lang !== selected) {
i18next.changeLanguage(lang)
dispatch(setLanguage(lang))
}
},
})
)(Dropdown)