-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathLocalePicker.tsx
66 lines (56 loc) · 1.4 KB
/
LocalePicker.tsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import React from 'react'
import { useTranslation } from 'next-i18next'
import { useRouter } from 'next/router'
import NavPopup, { NavPopupProps } from 'components/NavPopup'
const renderFlag = (src: string) => () =>
(
<div className='icon'>
<img src={src} />
</div>
)
const localeDetails = {
en: {
label: 'ENG',
icon: renderFlag('/img/iconFlagUnitedKingdom.png')
},
es: {
label: 'SPA',
icon: renderFlag('/img/iconFlagMexico.png')
},
zh: {
label: 'CHN',
icon: renderFlag('/img/iconFlagChina.png')
}
}
type LocalePickerProps = Pick<NavPopupProps, 'isOpen' | 'setIsOpen'>
const LocalePicker = (props: LocalePickerProps) => {
const router = useRouter()
const { i18n } = useTranslation()
const locale = localeDetails[i18n.language]
const items = Object.entries(localeDetails)
.filter(([key]) => key !== i18n.language)
.map(([key, value]) => ({
...value,
pathname: router.pathname,
locale: key
}))
return (
<div className='locale-picker'>
<NavPopup
{...props}
{...locale}
items={items}
variant='secondary'
xOffset={1}
disableHover
/>
{/* Preload the flag pngs */}
{Object.values(localeDetails).map(({ label, icon }) => (
<div key={label} style={{ display: 'none' }}>
{icon()}
</div>
))}
</div>
)
}
export default LocalePicker