123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116 |
- import {
- SpaceBetweenFlex,
- VerticallyCenteredFlex,
- } from "@ente/shared/components/Container";
- import {
- Box,
- ButtonProps,
- MenuItem,
- Typography,
- type TypographyProps,
- } from "@mui/material";
- import React from "react";
- import { CaptionedText } from "../CaptionedText";
- import PublicShareSwitch from "../Collections/CollectionShare/publicShare/switch";
- interface Iprops {
- onClick: () => void;
- color?: ButtonProps["color"];
- variant?: "primary" | "captioned" | "toggle" | "secondary" | "mini";
- fontWeight?: TypographyProps["fontWeight"];
- startIcon?: React.ReactNode;
- endIcon?: React.ReactNode;
- label?: string;
- subText?: string;
- subIcon?: React.ReactNode;
- checked?: boolean;
- labelComponent?: React.ReactNode;
- disabled?: boolean;
- }
- export function EnteMenuItem({
- onClick,
- color = "primary",
- startIcon,
- endIcon,
- label,
- subText,
- subIcon,
- checked,
- variant = "primary",
- fontWeight = "bold",
- labelComponent,
- disabled = false,
- }: Iprops) {
- const handleButtonClick = () => {
- if (variant === "toggle") {
- return;
- }
- onClick();
- };
- const handleIconClick = () => {
- if (variant !== "toggle") {
- return;
- }
- onClick();
- };
- return (
- <MenuItem
- disabled={disabled}
- onClick={handleButtonClick}
- sx={{
- width: "100%",
- color: (theme) =>
- variant !== "captioned" && theme.palette[color].main,
- ...(variant !== "secondary" &&
- variant !== "mini" && {
- backgroundColor: (theme) => theme.colors.fill.faint,
- }),
- "&:hover": {
- backgroundColor: (theme) => theme.colors.fill.faintPressed,
- },
- "& .MuiSvgIcon-root": {
- fontSize: "20px",
- },
- p: 0,
- borderRadius: "4px",
- }}
- >
- <SpaceBetweenFlex sx={{ pl: "16px", pr: "12px" }}>
- <VerticallyCenteredFlex sx={{ py: "14px" }} gap={"10px"}>
- {startIcon && startIcon}
- <Box px={"2px"}>
- {labelComponent ? (
- labelComponent
- ) : variant === "captioned" ? (
- <CaptionedText
- color={color}
- mainText={label}
- subText={subText}
- subIcon={subIcon}
- />
- ) : variant === "mini" ? (
- <Typography variant="mini" color="text.muted">
- {label}
- </Typography>
- ) : (
- <Typography fontWeight={fontWeight}>
- {label}
- </Typography>
- )}
- </Box>
- </VerticallyCenteredFlex>
- <VerticallyCenteredFlex gap={"4px"}>
- {endIcon && endIcon}
- {variant === "toggle" && (
- <PublicShareSwitch
- checked={checked}
- onClick={handleIconClick}
- />
- )}
- </VerticallyCenteredFlex>
- </SpaceBetweenFlex>
- </MenuItem>
- );
- }
|