all repos — caroster @ d5bf219b652f2f60fd39d2f6c78fa9ac42f249d8

[Octree] Group carpool to your event https://caroster.io

frontend/containers/Languages/Icon.tsx (view raw)

 1import {useState} from 'react';
 2import Box from '@mui/material/Box';
 3import IconButton from '@mui/material/IconButton';
 4import Icon from '@mui/material/Icon';
 5import Menu from '@mui/material/Menu';
 6import MenuItem from '@mui/material/MenuItem';
 7import {useTranslation} from 'react-i18next';
 8import {Enum_Userspermissionsuser_Lang as SupportedLocales} from '../../generated/graphql';
 9import withLanguagesSelection, {
10  LanguageSelectionComponentProps,
11} from './withLanguagesSelection';
12
13const IconLanguageSelection = ({
14  language,
15  onChangeLang,
16  displayMenu,
17}: LanguageSelectionComponentProps & {displayMenu?: boolean}) => {
18  const {t} = useTranslation();
19  const [anchorEl, setAnchorEl] = useState(null);
20
21  const handleClick = event => {
22    setAnchorEl(event.currentTarget);
23  };
24
25  const onConfirm = (lang: SupportedLocales) => {
26    setAnchorEl(null);
27    onChangeLang(lang);
28  };
29
30  return <>
31    <Box
32      position="absolute"
33      top={displayMenu ? 56 : 0}
34      right={0}
35      zIndex={1050}
36      p={1}
37    >
38      <IconButton color="primary" aria-label="Languages" onClick={handleClick} size="large">
39        <Icon>language</Icon>
40      </IconButton>
41    </Box>
42    <Menu
43      id="LanguagesMenu"
44      anchorEl={anchorEl}
45      keepMounted
46      open={Boolean(anchorEl)}
47      onClose={() => setAnchorEl(null)}
48    >
49      {Object.keys(SupportedLocales).map(locale => (
50          <MenuItem
51            disabled={language === SupportedLocales[locale]}
52            onClick={() => onConfirm(SupportedLocales[locale])}
53          >{t(`languages.${locale}`)}</MenuItem>
54        ))}
55    </Menu>
56  </>;
57};
58
59export default withLanguagesSelection(IconLanguageSelection);