all repos — caroster @ e05034e4ae972de5a8df40528d270d038c4343e6

[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      <MenuItem
50        disabled={language === SupportedLocales['fr']}
51        onClick={() => onConfirm(SupportedLocales['fr'])}
52      >{t`languages.fr`}</MenuItem>
53      <MenuItem
54        disabled={language === SupportedLocales['en']}
55        onClick={() => onConfirm(SupportedLocales['en'])}
56      >{t`languages.en`}</MenuItem>
57    </Menu>
58  </>;
59};
60
61export default withLanguagesSelection(IconLanguageSelection);