import { Menu, MenuItem, styled } from "@mui/material"; import { type ComponentProps, useRef, useState } from "react"; import { useTranslation } from "react-i18next"; import FormatPicker from "./formatPicker"; import { NumberFormats } from "./formatUtil"; type FormatMenuProps = { children: React.ReactNode; 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)} anchorEl={anchorElement.current} anchorOrigin={properties.anchorOrigin} > onChange(NumberFormats.AUTO)}> {t("toolbar.format_menu.auto")} 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;