You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
1.6 KiB
74 lines
1.6 KiB
import React from 'react'
|
|
|
|
import map from 'lodash/map'
|
|
|
|
import { useLexicsStore } from 'features/LexicsStore'
|
|
import { OutsideClick } from 'features/OutsideClick'
|
|
|
|
import { useToggle } from 'hooks'
|
|
|
|
import { langsList } from './config'
|
|
import {
|
|
Wrapper,
|
|
WorldIcon,
|
|
LangsList,
|
|
LangsItem,
|
|
FlagIcon,
|
|
} from './styled'
|
|
import './flags.scss'
|
|
|
|
export const LanguageSelect = () => {
|
|
const { changeLang, translate } = useLexicsStore()
|
|
const {
|
|
close,
|
|
isOpen,
|
|
open,
|
|
} = useToggle()
|
|
|
|
const handleLangChange = (locale: string) => () => {
|
|
changeLang(locale)
|
|
close()
|
|
}
|
|
|
|
return (
|
|
<OutsideClick onClick={close}>
|
|
<Wrapper>
|
|
<WorldIcon
|
|
onClick={open}
|
|
active={isOpen}
|
|
title={translate('select_language')}
|
|
aria-expanded={isOpen}
|
|
aria-controls='langsList'
|
|
/>
|
|
{isOpen && (
|
|
<LangsList id='langsList'>
|
|
{
|
|
map(
|
|
langsList,
|
|
({
|
|
className,
|
|
locale,
|
|
title,
|
|
}) => (
|
|
<LangsItem
|
|
key={locale}
|
|
title={title}
|
|
onClick={handleLangChange(locale)}
|
|
>
|
|
<FlagIcon
|
|
className={`
|
|
flag-icon
|
|
flag-icon-24x16
|
|
flag-icon-${className}
|
|
`}
|
|
/>
|
|
</LangsItem>
|
|
),
|
|
)
|
|
}
|
|
</LangsList>
|
|
)}
|
|
</Wrapper>
|
|
</OutsideClick>
|
|
)
|
|
}
|
|
|