react-garden
Version:
React + TypeScript + ThreeJS app using Material UI on NextJS, Apollo Client, GraphQL + WordPress REST APIs, for ThreeD web development.. a part of the threed.ai code family.
102 lines (90 loc) • 2.86 kB
JavaScript
// ** React Imports
import { Fragment, useEffect, useState } from 'react'
// ** MUI Imports
import Menu from '@mui/material/Menu'
import MenuItem from '@mui/material/MenuItem'
import IconButton from '@mui/material/IconButton'
// ** Icons Imports
import Translate from 'mdi-material-ui/Translate'
// ** Third Party Import
import { useTranslation } from 'react-i18next'
const LanguageDropdown = ({ settings, saveSettings }) => {
// ** State
const [anchorEl, setAnchorEl] = useState(null)
// ** Hook
const { i18n } = useTranslation()
// ** Vars
const { layout, direction } = settings
useEffect(() => {
if (i18n.language === 'ar' && direction === 'ltr') {
saveSettings({ ...settings, direction: 'ltr' })
} else if (i18n.language === 'ar' || direction === 'rtl') {
saveSettings({ ...settings, direction: 'rtl' })
} else {
saveSettings({ ...settings, direction: 'ltr' })
}
}, [i18n.language, direction])
const handleLangDropdownOpen = event => {
setAnchorEl(event.currentTarget)
}
const handleLangDropdownClose = () => {
setAnchorEl(null)
}
const handleLangItemClick = lang => {
i18n.changeLanguage(lang)
handleLangDropdownClose()
}
return (
<>
<IconButton
color='inherit'
aria-haspopup='true'
aria-controls='customized-menu'
onClick={handleLangDropdownOpen}
sx={layout === 'vertical' ? { mr: 0.75 } : { mx: 0.75 }}
>
<Translate />
</IconButton>
<Menu
anchorEl={anchorEl}
open={Boolean(anchorEl)}
onClose={handleLangDropdownClose}
sx={{ '& .MuiMenu-paper': { mt: 4, minWidth: 130 } }}
anchorOrigin={{ vertical: 'bottom', horizontal: direction === 'ltr' ? 'right' : 'left' }}
transformOrigin={{ vertical: 'top', horizontal: direction === 'ltr' ? 'right' : 'left' }}
>
<MenuItem
sx={{ py: 2 }}
selected={i18n.language === 'en'}
onClick={() => {
handleLangItemClick('en')
saveSettings({ ...settings, direction: 'ltr' })
}}
>
English
</MenuItem>
<MenuItem
sx={{ py: 2 }}
selected={i18n.language === 'fr'}
onClick={() => {
handleLangItemClick('fr')
saveSettings({ ...settings, direction: 'ltr' })
}}
>
French
</MenuItem>
<MenuItem
sx={{ py: 2 }}
selected={i18n.language === 'ar'}
onClick={() => {
handleLangItemClick('ar')
saveSettings({ ...settings, direction: 'rtl' })
}}
>
Arabic
</MenuItem>
</Menu>
</>
)
}
export default LanguageDropdown