option.tsx 1.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import { FluidContainer } from "@ente/shared/components/Container";
  2. import { Box, ButtonProps, MenuItem, Typography } from "@mui/material";
  3. import React, { useContext } from "react";
  4. import { OverflowMenuContext } from "./context";
  5. interface Iprops {
  6. onClick: () => void;
  7. color?: ButtonProps["color"];
  8. startIcon?: React.ReactNode;
  9. endIcon?: React.ReactNode;
  10. keepOpenAfterClick?: boolean;
  11. children?: any;
  12. }
  13. export function OverflowMenuOption({
  14. onClick,
  15. color = "primary",
  16. startIcon,
  17. endIcon,
  18. keepOpenAfterClick,
  19. children,
  20. }: Iprops) {
  21. const menuContext = useContext(OverflowMenuContext);
  22. const handleClick = () => {
  23. onClick();
  24. if (!keepOpenAfterClick) {
  25. menuContext.close();
  26. }
  27. };
  28. return (
  29. <MenuItem
  30. onClick={handleClick}
  31. sx={{
  32. minWidth: 220,
  33. color: (theme) => theme.palette[color].main,
  34. padding: 1.5,
  35. "& .MuiSvgIcon-root": {
  36. fontSize: "20px",
  37. },
  38. }}
  39. >
  40. <FluidContainer>
  41. {startIcon && (
  42. <Box
  43. sx={{
  44. padding: 0,
  45. marginRight: 1.5,
  46. }}
  47. >
  48. {startIcon}
  49. </Box>
  50. )}
  51. <Typography fontWeight="bold">{children}</Typography>
  52. </FluidContainer>
  53. {endIcon && (
  54. <Box
  55. sx={{
  56. padding: 0,
  57. marginLeft: 1,
  58. }}
  59. >
  60. {endIcon}
  61. </Box>
  62. )}
  63. </MenuItem>
  64. );
  65. }