import React from 'react'; import { useDispatch, useSelector } from 'react-redux'; // material-ui import { useTheme } from '@mui/material/styles'; import { Avatar, Box, ButtonBase, ClickAwayListener, Grid, List, ListItemButton, ListItemText, Paper, Popper, Typography, useMediaQuery } from '@mui/material'; // project imports import Transitions from 'ui-component/extended/Transitions'; import * as actionTypes from 'store/actions'; import { DefaultRootStateProps } from 'types'; // assets import TranslateTwoToneIcon from '@mui/icons-material/TranslateTwoTone'; // ==============================|| LOCALIZATION ||============================== // const LocalizationSection = () => { const customization = useSelector((state: DefaultRootStateProps) => state.customization); const dispatch = useDispatch(); const theme = useTheme(); const matchesXs = useMediaQuery(theme.breakpoints.down('md')); const [open, setOpen] = React.useState(false); /** * anchorRef is used on different componets and specifying one type leads to other components throwing an error * */ const anchorRef = React.useRef(null); const [language, setLanguage] = React.useState(customization.locale); const handleListItemClick = ( event: React.MouseEvent | React.MouseEvent | undefined, lng: string ) => { setLanguage(lng); dispatch({ type: actionTypes.THEME_LOCALE, locale: lng }); setOpen(false); }; const handleToggle = () => { setOpen((prevOpen) => !prevOpen); }; const handleClose = (event: MouseEvent | TouchEvent) => { if (anchorRef.current && anchorRef.current.contains(event.target)) { return; } setOpen(false); }; const prevOpen = React.useRef(open); React.useEffect(() => { if (prevOpen.current === true && open === false) { anchorRef.current.focus(); } prevOpen.current = open; }, [open]); React.useEffect(() => { setLanguage(customization.locale); }, [customization]); return ( <> {language !== 'en' && ( {language} )} {language === 'en' && } {({ TransitionProps }) => ( handleListItemClick(event, 'en')}> English (UK) } /> handleListItemClick(event, 'fr')}> français (French) } /> handleListItemClick(event, 'ro')}> Română (Romanian) } /> handleListItemClick(event, 'zh')}> 中国人 (Chinese) } /> )} ); }; export default LocalizationSection;