import { Button, Menu, MenuItem, styled } from "@mui/material"; import { ChevronDown } from "lucide-react"; import { useRef, useState } from "react"; import ColorPicker from "../colorPicker"; import { isInReferenceMode } from "../editor/util"; import type { WorkbookState } from "../workbookState"; import { SheetRenameDialog } from "./menus"; interface SheetProps { name: string; color: string; selected: boolean; onSelected: () => void; onColorChanged: (hex: string) => void; onRenamed: (name: string) => void; onDeleted: () => void; workbookState: WorkbookState; } function Sheet(props: SheetProps) { const { name, color, selected, workbookState, onSelected } = props; const [anchorEl, setAnchorEl] = useState(null); const [colorPickerOpen, setColorPickerOpen] = useState(false); const colorButton = useRef(null); const open = Boolean(anchorEl); const handleOpen = (event: React.MouseEvent) => { setAnchorEl(event.currentTarget); }; const handleClose = () => { setAnchorEl(null); }; const [renameDialogOpen, setRenameDialogOpen] = useState(false); const handleCloseRenameDialog = () => { setRenameDialogOpen(false); }; const handleOpenRenameDialog = () => { setRenameDialogOpen(true); }; return ( <> { onSelected(); event.stopPropagation(); event.preventDefault(); }} onPointerDown={(event) => { // If it is in browse mode stop he event const cell = workbookState.getEditingCell(); if (cell && isInReferenceMode(cell.text, cell.cursorStart)) { event.stopPropagation(); event.preventDefault(); } }} ref={colorButton} > {name} { handleOpenRenameDialog(); handleClose(); }} > Rename { setColorPickerOpen(true); handleClose(); }} > Change Color { props.onDeleted(); handleClose(); }} > {" "} Delete { props.onRenamed(newName); setRenameDialogOpen(false); }} /> { props.onColorChanged(color); setColorPickerOpen(false); }} onClose={() => { setColorPickerOpen(false); }} anchorEl={colorButton} open={colorPickerOpen} /> ); } const StyledMenu = styled(Menu)``; const StyledButton = styled(Button)` width: 15px; height: 24px; min-width: 0px; padding: 0px; color: inherit; font-weight: inherit; svg { width: 15px; height: 15px; } `; const Wrapper = styled("div")` display: flex; margin-left: 20px; border-bottom: 3px solid; border-top: 3px solid white; line-height: 34px; align-items: center; `; const Name = styled("div")` font-size: 12px; margin-right: 5px; text-wrap: nowrap; `; export default Sheet;