ente/web/packages/shared/components/DialogBox/TitleWithCloseButton.tsx
2024-05-25 06:34:13 +05:30

60 lines
1.5 KiB
TypeScript

import { SpaceBetweenFlex } from "@ente/shared/components/Container";
import CloseIcon from "@mui/icons-material/Close";
import {
DialogTitle,
IconButton,
Typography,
type DialogProps,
} from "@mui/material";
import React from "react";
interface DialogTitleWithCloseButtonProps {
onClose: () => void;
}
const DialogTitleWithCloseButton: React.FC<
React.PropsWithChildren<DialogTitleWithCloseButtonProps>
> = ({ children, onClose }) => {
return (
<DialogTitle>
<SpaceBetweenFlex>
<Typography variant="h3" fontWeight={"bold"}>
{children}
</Typography>
{onClose && (
<IconButton
aria-label="close"
onClick={onClose}
sx={{ float: "right" }}
color="secondary"
>
<CloseIcon />
</IconButton>
)}
</SpaceBetweenFlex>
</DialogTitle>
);
};
export default DialogTitleWithCloseButton;
export const dialogCloseHandler =
({
staticBackdrop,
nonClosable,
onClose,
}: {
staticBackdrop?: boolean;
nonClosable?: boolean;
onClose: () => void;
}): DialogProps["onClose"] =>
(_, reason) => {
if (nonClosable) {
// no-op
} else if (staticBackdrop && reason === "backdropClick") {
// no-op
} else {
onClose();
}
};