import { useState, useRef, ComponentProps } from 'react'; import { useTranslation } from 'react-i18next'; import { NumberFormats } from './formatUtil'; import { Menu, MenuItem, styled } from '@mui/material'; import FormatPicker from './formatPicker'; type FormatMenuProps = { children: any; //ReactI18NextChild | Iterable; numFmt: string; onChange: (numberFmt: string) => void; onExited?: () => void; anchorOrigin?: ComponentProps['anchorOrigin']; }; const FormatMenu = (properties: FormatMenuProps) => { const { t } = useTranslation(); const { onChange } = properties; const [isMenuOpen, setMenuOpen] = useState(false); const [isPickerOpen, setPickerOpen] = useState(false); const anchorElement = useRef(null); return ( <> setMenuOpen(true)} ref={anchorElement}> {properties.children} setMenuOpen(false)} // onExited={properties.onExited} anchorEl={anchorElement.current} anchorOrigin={properties.anchorOrigin} > onChange(NumberFormats.AUTO)}> {t('toolbar.format_menu.auto')} {/** TODO: Text option that transforms into plain text */} onChange(NumberFormats.NUMBER)}> {t('toolbar.format_menu.number')} {t('toolbar.format_menu.number_example')} onChange(NumberFormats.PERCENTAGE)}> {t('toolbar.format_menu.percentage')} {t('toolbar.format_menu.percentage_example')} onChange(NumberFormats.CURRENCY_EUR)}> {t('toolbar.format_menu.currency_eur')} {t('toolbar.format_menu.currency_eur_example')} onChange(NumberFormats.CURRENCY_USD)}> {t('toolbar.format_menu.currency_usd')} {t('toolbar.format_menu.currency_usd_example')} onChange(NumberFormats.CURRENCY_GBP)}> {t('toolbar.format_menu.currency_gbp')} {t('toolbar.format_menu.currency_gbp_example')} onChange(NumberFormats.DATE_SHORT)}> {t('toolbar.format_menu.date_short')} {t('toolbar.format_menu.date_short_example')} onChange(NumberFormats.DATE_LONG)}> {t('toolbar.format_menu.date_long')} {t('toolbar.format_menu.date_long_example')} setPickerOpen(true)}> {t('toolbar.format_menu.custom')} setPickerOpen(false)} onExited={properties.onExited} /> ); }; const MenuItemWrapper = styled(MenuItem)` display: flex; justify-content: space-between; font-size: 14px; width: 100%; `; const ChildrenWrapper = styled('div')` display: flex; `; const MenuDivider = styled('div')``; const MenuItemText = styled('div')` color: #000; `; const MenuItemExample = styled('div')` margin-left: 20px; `; export default FormatMenu;