Files
Checkmate/client/src/Components/inputs/Dialog.tsx
T

78 lines
1.9 KiB
TypeScript
Raw Normal View History

2026-01-26 19:36:29 +00:00
import Dialog from "@mui/material/Dialog";
2026-01-31 01:12:05 +00:00
import type { DialogProps } from "@mui/material/Dialog";
2026-01-26 19:36:29 +00:00
import DialogActions from "@mui/material/DialogActions";
import DialogContent from "@mui/material/DialogContent";
import DialogContentText from "@mui/material/DialogContentText";
import DialogTitle from "@mui/material/DialogTitle";
2026-02-20 18:13:39 +00:00
import { Button } from "@/Components/inputs";
2026-02-20 18:10:43 +00:00
import { typographyLevels } from "@/Utils/Theme/Palette";
2026-01-26 19:36:29 +00:00
import { useTranslation } from "react-i18next";
2026-01-31 01:12:05 +00:00
import type { ReactNode } from "react";
2026-01-26 19:36:29 +00:00
export const DialogInput = ({
open,
title,
content,
onConfirm,
onCancel,
confirmColor = "primary",
cancelColor = "error",
loading = false,
2026-01-31 00:41:03 +00:00
cancelText,
confirmText,
2026-01-31 01:12:05 +00:00
children,
maxWidth,
fullWidth = false,
2026-02-08 16:30:51 +00:00
additionalButtons,
2026-01-26 19:36:29 +00:00
}: {
open: boolean;
title?: string;
content?: string;
onConfirm?(item: any): any;
onCancel?(item: any): any;
confirmColor?: "error" | "primary";
cancelColor?: "error" | "primary";
loading?: boolean;
2026-01-31 00:41:03 +00:00
cancelText?: string;
confirmText?: string;
2026-01-31 01:12:05 +00:00
children?: ReactNode;
maxWidth?: DialogProps["maxWidth"];
fullWidth?: boolean;
2026-02-08 16:30:51 +00:00
additionalButtons?: ReactNode;
2026-01-26 19:36:29 +00:00
}) => {
const { t } = useTranslation();
return (
2026-01-31 01:12:05 +00:00
<Dialog
open={open}
maxWidth={maxWidth}
fullWidth={fullWidth}
>
2026-02-01 00:34:48 +00:00
{title && <DialogTitle sx={{ fontSize: typographyLevels.l }}>{title}</DialogTitle>}
2026-01-26 19:36:29 +00:00
<DialogContent>
2026-01-31 01:12:05 +00:00
{content && <DialogContentText>{content}</DialogContentText>}
{children}
2026-01-26 19:36:29 +00:00
</DialogContent>
<DialogActions>
<Button
loading={loading}
variant="contained"
color={cancelColor}
onClick={onCancel}
>
2026-01-31 00:41:03 +00:00
{cancelText ?? t("common.buttons.cancel")}
2026-01-26 19:36:29 +00:00
</Button>
2026-02-08 16:30:51 +00:00
{additionalButtons}
2026-02-03 23:45:23 +00:00
{onConfirm && (
<Button
loading={loading}
variant="contained"
color={confirmColor}
onClick={onConfirm}
>
{confirmText ?? t("common.buttons.confirm")}
</Button>
)}
2026-01-26 19:36:29 +00:00
</DialogActions>
</Dialog>
);
};