base-dialog.tsx 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. import { forwardRef, ReactNode, useImperativeHandle, useState } from "react";
  2. import {
  3. Button,
  4. Dialog,
  5. DialogActions,
  6. DialogContent,
  7. DialogTitle,
  8. type SxProps,
  9. type Theme,
  10. } from "@mui/material";
  11. interface Props {
  12. title: ReactNode;
  13. open: boolean;
  14. okBtn?: ReactNode;
  15. cancelBtn?: ReactNode;
  16. disableOk?: boolean;
  17. disableCancel?: boolean;
  18. disableFooter?: boolean;
  19. contentSx?: SxProps<Theme>;
  20. onOk?: () => void;
  21. onCancel?: () => void;
  22. onClose?: () => void;
  23. }
  24. export interface DialogRef {
  25. open: () => void;
  26. close: () => void;
  27. }
  28. export const BaseDialog: React.FC<Props> = (props) => {
  29. const {
  30. open,
  31. title,
  32. children,
  33. okBtn,
  34. cancelBtn,
  35. contentSx,
  36. disableCancel,
  37. disableOk,
  38. disableFooter,
  39. } = props;
  40. return (
  41. <Dialog open={open} onClose={props.onClose}>
  42. <DialogTitle>{title}</DialogTitle>
  43. <DialogContent sx={contentSx}>{children}</DialogContent>
  44. {!disableFooter && (
  45. <DialogActions>
  46. {!disableCancel && (
  47. <Button variant="outlined" onClick={props.onCancel}>
  48. {cancelBtn}
  49. </Button>
  50. )}
  51. {!disableOk && (
  52. <Button variant="contained" onClick={props.onOk}>
  53. {okBtn}
  54. </Button>
  55. )}
  56. </DialogActions>
  57. )}
  58. </Dialog>
  59. );
  60. };