From fb764fed1cf4fed986fa16f175855536262e1b2b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Nicol=C3=A1s=20Hatcher?= Date: Sat, 14 Dec 2024 22:12:39 +0100 Subject: [PATCH] FIX[WebApp]: Splits the menu.tsx in two files This is so that SheetListMenu and SheetRenameDialog are on its own files. Also renamed isOpen => open and close => onClose --- .../components/navigation/SheetListMenu.tsx | 99 +++++++++++++++++ .../{menus.tsx => SheetRenameDialog.tsx} | 100 +----------------- .../src/components/navigation/navigation.tsx | 6 +- webapp/src/components/navigation/sheet.tsx | 2 +- 4 files changed, 105 insertions(+), 102 deletions(-) create mode 100644 webapp/src/components/navigation/SheetListMenu.tsx rename webapp/src/components/navigation/{menus.tsx => SheetRenameDialog.tsx} (61%) diff --git a/webapp/src/components/navigation/SheetListMenu.tsx b/webapp/src/components/navigation/SheetListMenu.tsx new file mode 100644 index 0000000..50c6f15 --- /dev/null +++ b/webapp/src/components/navigation/SheetListMenu.tsx @@ -0,0 +1,99 @@ +import { styled } from "@mui/material"; +import Menu from "@mui/material/Menu"; +import MenuItem from "@mui/material/MenuItem"; +import { Check } from "lucide-react"; +import type { SheetOptions } from "./types"; + +function isWhiteColor(color: string): boolean { + return ["#FFF", "#FFFFFF"].includes(color); +} + +interface SheetListMenuProps { + open: boolean; + onClose: () => void; + anchorEl: HTMLButtonElement | null; + onSheetSelected: (index: number) => void; + sheetOptionsList: SheetOptions[]; + selectedIndex: number; +} + +const SheetListMenu = (properties: SheetListMenuProps) => { + const { + open, + onClose, + anchorEl, + onSheetSelected, + sheetOptionsList, + selectedIndex, + } = properties; + + const hasColors = sheetOptionsList.some((tab) => !isWhiteColor(tab.color)); + + return ( + + {sheetOptionsList.map((tab, index) => ( + onSheetSelected(index)} + > + {index === selectedIndex ? ( + + ) : ( +
+ )} + {hasColors && } + + {tab.name} + + + ))} + + ); +}; + +const StyledMenu = styled(Menu)({ + "& .MuiPaper-root": { + borderRadius: 8, + padding: 4, + }, + "& .MuiList-padding": { + padding: 0, + }, +}); + +const StyledMenuItem = styled(MenuItem)({ + padding: 8, + borderRadius: 4, +}); + +const ItemColor = styled("div")` + width: 12px; + height: 12px; + border-radius: 4px; + margin-right: 8px; +`; + +const ItemName = styled("div")` + font-size: 12px; + color: #333; +`; + +export default SheetListMenu; diff --git a/webapp/src/components/navigation/menus.tsx b/webapp/src/components/navigation/SheetRenameDialog.tsx similarity index 61% rename from webapp/src/components/navigation/menus.tsx rename to webapp/src/components/navigation/SheetRenameDialog.tsx index a41c4f8..f8a4215 100644 --- a/webapp/src/components/navigation/menus.tsx +++ b/webapp/src/components/navigation/SheetRenameDialog.tsx @@ -1,15 +1,7 @@ import { Dialog, TextField, styled } from "@mui/material"; -import Menu from "@mui/material/Menu"; -import MenuItem from "@mui/material/MenuItem"; -import { Check } from "lucide-react"; import { useState } from "react"; import { useTranslation } from "react-i18next"; import { theme } from "../../theme"; -import type { SheetOptions } from "./types"; - -function isWhiteColor(color: string): boolean { - return ["#FFF", "#FFFFFF"].includes(color); -} interface SheetRenameDialogProps { isOpen: boolean; @@ -18,7 +10,7 @@ interface SheetRenameDialogProps { defaultName: string; } -export const SheetRenameDialog = (properties: SheetRenameDialogProps) => { +const SheetRenameDialog = (properties: SheetRenameDialogProps) => { const { t } = useTranslation(); const [name, setName] = useState(properties.defaultName); const handleClose = () => { @@ -84,94 +76,6 @@ export const SheetRenameDialog = (properties: SheetRenameDialogProps) => { ); }; -interface SheetListMenuProps { - isOpen: boolean; - close: () => void; - anchorEl: HTMLButtonElement | null; - onSheetSelected: (index: number) => void; - sheetOptionsList: SheetOptions[]; - selectedIndex: number; -} - -const SheetListMenu = (properties: SheetListMenuProps) => { - const { - isOpen, - close, - anchorEl, - onSheetSelected, - sheetOptionsList, - selectedIndex, - } = properties; - - const hasColors = sheetOptionsList.some((tab) => !isWhiteColor(tab.color)); - - return ( - - {sheetOptionsList.map((tab, index) => ( - onSheetSelected(index)} - > - {index === selectedIndex ? ( - - ) : ( -
- )} - {hasColors && } - - {tab.name} - - - ))} - - ); -}; - -const StyledMenu = styled(Menu)({ - "& .MuiPaper-root": { - borderRadius: 8, - padding: 4, - }, - "& .MuiList-padding": { - padding: 0, - }, -}); - -const StyledMenuItem = styled(MenuItem)({ - padding: 8, - borderRadius: 4, -}); - -const ItemColor = styled("div")` - width: 12px; - height: 12px; - border-radius: 4px; - margin-right: 8px; -`; - -const ItemName = styled("div")` - font-size: 12px; - color: #333; -`; - const StyledDialogTitle = styled("div")` display: flex; align-items: center; @@ -246,4 +150,4 @@ const StyledButton = styled("div")` } `; -export default SheetListMenu; +export default SheetRenameDialog; diff --git a/webapp/src/components/navigation/navigation.tsx b/webapp/src/components/navigation/navigation.tsx index 4908453..184ab7c 100644 --- a/webapp/src/components/navigation/navigation.tsx +++ b/webapp/src/components/navigation/navigation.tsx @@ -6,7 +6,7 @@ import { theme } from "../../theme"; import { NAVIGATION_HEIGHT } from "../constants"; import { StyledButton } from "../toolbar"; import type { WorkbookState } from "../workbookState"; -import SheetListMenu from "./menus"; +import SheetListMenu from "./SheetListMenu"; import Sheet from "./sheet"; import type { SheetOptions } from "./types"; @@ -77,8 +77,8 @@ function Navigation(props: NavigationProps) { { onSheetSelected(index); diff --git a/webapp/src/components/navigation/sheet.tsx b/webapp/src/components/navigation/sheet.tsx index ba25919..31b3a82 100644 --- a/webapp/src/components/navigation/sheet.tsx +++ b/webapp/src/components/navigation/sheet.tsx @@ -4,7 +4,7 @@ import { useRef, useState } from "react"; import ColorPicker from "../colorPicker"; import { isInReferenceMode } from "../editor/util"; import type { WorkbookState } from "../workbookState"; -import { SheetRenameDialog } from "./menus"; +import SheetRenameDialog from "./SheetRenameDialog"; interface SheetProps { name: string;