update: show which format is active in FormatMenu (#450)

* update: show which format is active in formatmenu

* update: requested fixes
This commit is contained in:
Daniel González-Albo
2025-10-19 12:44:58 +02:00
committed by GitHub
parent f2da24326b
commit d9812876e2
2 changed files with 65 additions and 10 deletions

View File

@@ -1,8 +1,9 @@
import { Menu, MenuItem, styled } from "@mui/material"; import { Menu, MenuItem, styled } from "@mui/material";
import { Check } from "lucide-react";
import { type ComponentProps, useCallback, useRef, useState } from "react"; import { type ComponentProps, useCallback, useRef, useState } from "react";
import { useTranslation } from "react-i18next"; import { useTranslation } from "react-i18next";
import FormatPicker from "./FormatPicker"; import FormatPicker from "./FormatPicker";
import { NumberFormats } from "./formatUtil"; import { KNOWN_FORMATS, NumberFormats } from "./formatUtil";
type FormatMenuProps = { type FormatMenuProps = {
children: React.ReactNode; children: React.ReactNode;
@@ -26,6 +27,8 @@ const FormatMenu = (properties: FormatMenuProps) => {
[properties.onChange], [properties.onChange],
); );
const isCustomFormat = !KNOWN_FORMATS.has(properties.numFmt);
return ( return (
<> <>
<ChildrenWrapper <ChildrenWrapper
@@ -48,11 +51,17 @@ const FormatMenu = (properties: FormatMenuProps) => {
}} }}
> >
<MenuItemWrapper onClick={(): void => onSelect(NumberFormats.AUTO)}> <MenuItemWrapper onClick={(): void => onSelect(NumberFormats.AUTO)}>
<MenuItemText>{t("toolbar.format_menu.auto")}</MenuItemText> <MenuItemText>
<CheckIcon $active={properties.numFmt === NumberFormats.AUTO} />
{t("toolbar.format_menu.auto")}
</MenuItemText>
</MenuItemWrapper> </MenuItemWrapper>
<MenuDivider /> <MenuDivider />
<MenuItemWrapper onClick={(): void => onSelect(NumberFormats.NUMBER)}> <MenuItemWrapper onClick={(): void => onSelect(NumberFormats.NUMBER)}>
<MenuItemText>{t("toolbar.format_menu.number")}</MenuItemText> <MenuItemText>
<CheckIcon $active={properties.numFmt === NumberFormats.NUMBER} />
{t("toolbar.format_menu.number")}
</MenuItemText>
<MenuItemExample> <MenuItemExample>
{t("toolbar.format_menu.number_example")} {t("toolbar.format_menu.number_example")}
</MenuItemExample> </MenuItemExample>
@@ -60,7 +69,12 @@ const FormatMenu = (properties: FormatMenuProps) => {
<MenuItemWrapper <MenuItemWrapper
onClick={(): void => onSelect(NumberFormats.PERCENTAGE)} onClick={(): void => onSelect(NumberFormats.PERCENTAGE)}
> >
<MenuItemText>{t("toolbar.format_menu.percentage")}</MenuItemText> <MenuItemText>
<CheckIcon
$active={properties.numFmt === NumberFormats.PERCENTAGE}
/>
{t("toolbar.format_menu.percentage")}
</MenuItemText>
<MenuItemExample> <MenuItemExample>
{t("toolbar.format_menu.percentage_example")} {t("toolbar.format_menu.percentage_example")}
</MenuItemExample> </MenuItemExample>
@@ -70,7 +84,12 @@ const FormatMenu = (properties: FormatMenuProps) => {
<MenuItemWrapper <MenuItemWrapper
onClick={(): void => onSelect(NumberFormats.CURRENCY_EUR)} onClick={(): void => onSelect(NumberFormats.CURRENCY_EUR)}
> >
<MenuItemText>{t("toolbar.format_menu.currency_eur")}</MenuItemText> <MenuItemText>
<CheckIcon
$active={properties.numFmt === NumberFormats.CURRENCY_EUR}
/>
{t("toolbar.format_menu.currency_eur")}
</MenuItemText>
<MenuItemExample> <MenuItemExample>
{t("toolbar.format_menu.currency_eur_example")} {t("toolbar.format_menu.currency_eur_example")}
</MenuItemExample> </MenuItemExample>
@@ -78,7 +97,12 @@ const FormatMenu = (properties: FormatMenuProps) => {
<MenuItemWrapper <MenuItemWrapper
onClick={(): void => onSelect(NumberFormats.CURRENCY_USD)} onClick={(): void => onSelect(NumberFormats.CURRENCY_USD)}
> >
<MenuItemText>{t("toolbar.format_menu.currency_usd")}</MenuItemText> <MenuItemText>
<CheckIcon
$active={properties.numFmt === NumberFormats.CURRENCY_USD}
/>
{t("toolbar.format_menu.currency_usd")}
</MenuItemText>
<MenuItemExample> <MenuItemExample>
{t("toolbar.format_menu.currency_usd_example")} {t("toolbar.format_menu.currency_usd_example")}
</MenuItemExample> </MenuItemExample>
@@ -86,7 +110,12 @@ const FormatMenu = (properties: FormatMenuProps) => {
<MenuItemWrapper <MenuItemWrapper
onClick={(): void => onSelect(NumberFormats.CURRENCY_GBP)} onClick={(): void => onSelect(NumberFormats.CURRENCY_GBP)}
> >
<MenuItemText>{t("toolbar.format_menu.currency_gbp")}</MenuItemText> <MenuItemText>
<CheckIcon
$active={properties.numFmt === NumberFormats.CURRENCY_GBP}
/>
{t("toolbar.format_menu.currency_gbp")}
</MenuItemText>
<MenuItemExample> <MenuItemExample>
{t("toolbar.format_menu.currency_gbp_example")} {t("toolbar.format_menu.currency_gbp_example")}
</MenuItemExample> </MenuItemExample>
@@ -96,7 +125,12 @@ const FormatMenu = (properties: FormatMenuProps) => {
<MenuItemWrapper <MenuItemWrapper
onClick={(): void => onSelect(NumberFormats.DATE_SHORT)} onClick={(): void => onSelect(NumberFormats.DATE_SHORT)}
> >
<MenuItemText>{t("toolbar.format_menu.date_short")}</MenuItemText> <MenuItemText>
<CheckIcon
$active={properties.numFmt === NumberFormats.DATE_SHORT}
/>
{t("toolbar.format_menu.date_short")}
</MenuItemText>
<MenuItemExample> <MenuItemExample>
{t("toolbar.format_menu.date_short_example")} {t("toolbar.format_menu.date_short_example")}
</MenuItemExample> </MenuItemExample>
@@ -104,7 +138,12 @@ const FormatMenu = (properties: FormatMenuProps) => {
<MenuItemWrapper <MenuItemWrapper
onClick={(): void => onSelect(NumberFormats.DATE_LONG)} onClick={(): void => onSelect(NumberFormats.DATE_LONG)}
> >
<MenuItemText>{t("toolbar.format_menu.date_long")}</MenuItemText> <MenuItemText>
<CheckIcon
$active={properties.numFmt === NumberFormats.DATE_LONG}
/>
{t("toolbar.format_menu.date_long")}
</MenuItemText>
<MenuItemExample> <MenuItemExample>
{t("toolbar.format_menu.date_long_example")} {t("toolbar.format_menu.date_long_example")}
</MenuItemExample> </MenuItemExample>
@@ -112,7 +151,10 @@ const FormatMenu = (properties: FormatMenuProps) => {
<MenuDivider /> <MenuDivider />
<MenuItemWrapper onClick={(): void => setPickerOpen(true)}> <MenuItemWrapper onClick={(): void => setPickerOpen(true)}>
<MenuItemText>{t("toolbar.format_menu.custom")}</MenuItemText> <MenuItemText>
<CheckIcon $active={isCustomFormat} />
{t("toolbar.format_menu.custom")}
</MenuItemText>
</MenuItemWrapper> </MenuItemWrapper>
</StyledMenu> </StyledMenu>
<FormatPicker <FormatPicker
@@ -139,6 +181,7 @@ const StyledMenu = styled(Menu)`
const MenuItemWrapper = styled(MenuItem)` const MenuItemWrapper = styled(MenuItem)`
display: flex; display: flex;
align-items: center;
justify-content: space-between; justify-content: space-between;
font-size: 12px; font-size: 12px;
width: calc(100% - 8px); width: calc(100% - 8px);
@@ -161,8 +204,18 @@ const MenuDivider = styled("div")`
border-top: 1px solid #eeeeee; border-top: 1px solid #eeeeee;
`; `;
const CheckIcon = styled(Check)<{ $active: boolean }>`
width: 16px;
height: 16px;
color: ${(props) => (props.$active ? "currentColor" : "transparent")};
margin-right: 8px;
flex-shrink: 0;
`;
const MenuItemText = styled("div")` const MenuItemText = styled("div")`
color: #000; color: #000;
display: flex;
align-items: center;
`; `;
const MenuItemExample = styled("div")` const MenuItemExample = styled("div")`

View File

@@ -42,3 +42,5 @@ export enum NumberFormats {
PERCENTAGE = "0.00%", PERCENTAGE = "0.00%",
NUMBER = "#,##0.00", NUMBER = "#,##0.00",
} }
export const KNOWN_FORMATS = new Set<string>(Object.values(NumberFormats));