mirror of
https://github.com/clash-verge-rev/clash-verge-rev.git
synced 2026-11-08 02:52:07 +08:00
77 lines
1.4 KiB
TypeScript
77 lines
1.4 KiB
TypeScript
import {
|
|
Button,
|
|
Dialog,
|
|
DialogActions,
|
|
DialogContent,
|
|
DialogTitle,
|
|
type SxProps,
|
|
type Theme,
|
|
} from '@mui/material'
|
|
import { ReactNode } from 'react'
|
|
|
|
interface Props {
|
|
title: ReactNode
|
|
open: boolean
|
|
okBtn?: ReactNode
|
|
cancelBtn?: ReactNode
|
|
disableEnforceFocus?: boolean
|
|
disableOk?: boolean
|
|
disableCancel?: boolean
|
|
disableFooter?: boolean
|
|
contentSx?: SxProps<Theme>
|
|
children?: ReactNode
|
|
loading?: boolean
|
|
onOk?: () => void
|
|
onCancel?: () => void
|
|
onClose?: () => void
|
|
}
|
|
|
|
export interface DialogRef {
|
|
open: () => void
|
|
close: () => void
|
|
}
|
|
|
|
export const BaseDialog: React.FC<Props> = ({
|
|
open,
|
|
title,
|
|
children,
|
|
okBtn,
|
|
cancelBtn,
|
|
disableEnforceFocus,
|
|
contentSx,
|
|
disableCancel,
|
|
disableOk,
|
|
disableFooter,
|
|
loading,
|
|
onOk,
|
|
onCancel,
|
|
onClose,
|
|
}) => {
|
|
return (
|
|
<Dialog
|
|
open={open}
|
|
onClose={onClose}
|
|
disableEnforceFocus={disableEnforceFocus}
|
|
>
|
|
<DialogTitle>{title}</DialogTitle>
|
|
|
|
<DialogContent sx={contentSx}>{children}</DialogContent>
|
|
|
|
{!disableFooter && (
|
|
<DialogActions>
|
|
{!disableCancel && (
|
|
<Button variant="outlined" onClick={onCancel}>
|
|
{cancelBtn}
|
|
</Button>
|
|
)}
|
|
{!disableOk && (
|
|
<Button loading={loading} variant="contained" onClick={onOk}>
|
|
{okBtn}
|
|
</Button>
|
|
)}
|
|
</DialogActions>
|
|
)}
|
|
</Dialog>
|
|
)
|
|
}
|