Dialogs
Please refer to MUI's official docs for more details on component's usage guide and API documentation.
Manage open
prop with the help of a state.
Selected: user02@gmail.com
- TSX
- JS
// React Imports
import { useState } from 'react'
// MUI Imports
import List from '@mui/material/List'
import Button from '@mui/material/Button'
import Dialog from '@mui/material/Dialog'
import MuiAvatar from '@mui/material/Avatar'
import ListItem from '@mui/material/ListItem'
import Typography from '@mui/material/Typography'
import DialogTitle from '@mui/material/DialogTitle'
import ListItemText from '@mui/material/ListItemText'
import ListItemButton from '@mui/material/ListItemButton'
import ListItemAvatar from '@mui/material/ListItemAvatar'
// Component Imports
import CustomAvatar from '@site/src/components/mui/Avatar'
const emails = ['username@gmail.com', 'user02@gmail.com']
const DialogsBasic = () => {
// States
const [open, setOpen] = useState<boolean>(false)
const [selectedValue, setSelectedValue] = useState<string>(emails[1])
const handleClickOpen = () => setOpen(true)
const handleDialogClose = () => setOpen(false)
const handleClose = (value: string) => {
setOpen(false)
setSelectedValue(value)
}
return (
<div>
<Typography variant='subtitle1' className='mbe-2' color='text.primary'>
Selected: {selectedValue}
</Typography>
<Button variant='outlined' onClick={handleClickOpen}>
Open simple dialog
</Button>
<Dialog
onClose={handleDialogClose}
aria-labelledby='simple-dialog-title'
open={open}
closeAfterTransition={false}
>
<DialogTitle id='simple-dialog-title'>Set backup account</DialogTitle>
<List className='pt-0 px-0'>
{emails.map(email => (
<ListItem key={email} disablePadding onClick={() => handleClose(email)}>
<ListItemButton>
<ListItemAvatar>
<CustomAvatar color='primary' skin='light'>
<i className='ri-user-3-line' />
</CustomAvatar>
</ListItemAvatar>
<ListItemText primary={email} />
</ListItemButton>
</ListItem>
))}
<ListItem disablePadding onClick={() => handleClose('addAccount')}>
<ListItemButton>
<ListItemAvatar>
<MuiAvatar>
<i className='ri-add-line' />
</MuiAvatar>
</ListItemAvatar>
<ListItemText primary='Add account' />
</ListItemButton>
</ListItem>
</List>
</Dialog>
</div>
)
}
export default DialogsBasic
// React Imports
import { useState } from 'react'
// MUI Imports
import List from '@mui/material/List'
import Button from '@mui/material/Button'
import Dialog from '@mui/material/Dialog'
import MuiAvatar from '@mui/material/Avatar'
import ListItem from '@mui/material/ListItem'
import Typography from '@mui/material/Typography'
import DialogTitle from '@mui/material/DialogTitle'
import ListItemText from '@mui/material/ListItemText'
import ListItemButton from '@mui/material/ListItemButton'
import ListItemAvatar from '@mui/material/ListItemAvatar'
// Component Imports
import CustomAvatar from '@site/src/components/mui/Avatar'
const emails = ['username@gmail.com', 'user02@gmail.com']
const DialogsBasic = () => {
// States
const [open, setOpen] = useState(false)
const [selectedValue, setSelectedValue] = useState(emails[1])
const handleClickOpen = () => setOpen(true)
const handleDialogClose = () => setOpen(false)
const handleClose = value => {
setOpen(false)
setSelectedValue(value)
}
return (
<div>
<Typography variant='subtitle1' className='mbe-2' color='text.primary'>
Selected: {selectedValue}
</Typography>
<Button variant='outlined' onClick={handleClickOpen}>
Open simple dialog
</Button>
<Dialog
onClose={handleDialogClose}
aria-labelledby='simple-dialog-title'
open={open}
closeAfterTransition={false}
>
<DialogTitle id='simple-dialog-title'>Set backup account</DialogTitle>
<List className='pt-0 px-0'>
{emails.map(email => (
<ListItem key={email} disablePadding onClick={() => handleClose(email)}>
<ListItemButton>
<ListItemAvatar>
<CustomAvatar color='primary' skin='light'>
<i className='ri-user-3-line' />
</CustomAvatar>
</ListItemAvatar>
<ListItemText primary={email} />
</ListItemButton>
</ListItem>
))}
<ListItem disablePadding onClick={() => handleClose('addAccount')}>
<ListItemButton>
<ListItemAvatar>
<MuiAvatar>
<i className='ri-add-line' />
</MuiAvatar>
</ListItemAvatar>
<ListItemText primary='Add account' />
</ListItemButton>
</ListItem>
</List>
</Dialog>
</div>
)
}
export default DialogsBasic
Show an alert to the user to convey something or make the user choose from the given options.
- TSX
- JS
// React Imports
import { useState } from 'react'
// MUI Imports
import Button from '@mui/material/Button'
import Dialog from '@mui/material/Dialog'
import DialogTitle from '@mui/material/DialogTitle'
import DialogContent from '@mui/material/DialogContent'
import DialogActions from '@mui/material/DialogActions'
import DialogContentText from '@mui/material/DialogContentText'
const DialogsAlert = () => {
// States
const [open, setOpen] = useState<boolean>(false)
const handleClickOpen = () => setOpen(true)
const handleClose = () => setOpen(false)
return (
<>
<Button variant='outlined' onClick={handleClickOpen}>
Open dialog
</Button>
<Dialog
open={open}
onClose={handleClose}
aria-labelledby='alert-dialog-title'
aria-describedby='alert-dialog-description'
closeAfterTransition={false}
>
<DialogTitle id='alert-dialog-title'>Use Google's location service?</DialogTitle>
<DialogContent>
<DialogContentText id='alert-dialog-description'>
Let Google help apps determine location. This means sending anonymous location data to Google, even when no
apps are running.
</DialogContentText>
</DialogContent>
<DialogActions>
<Button onClick={handleClose} variant='outlined' color='secondary'>
Disagree
</Button>
<Button onClick={handleClose} variant='contained'>
Agree
</Button>
</DialogActions>
</Dialog>
</>
)
}
export default DialogsAlert
// React Imports
import { useState } from 'react'
// MUI Imports
import Button from '@mui/material/Button'
import Dialog from '@mui/material/Dialog'
import DialogTitle from '@mui/material/DialogTitle'
import DialogContent from '@mui/material/DialogContent'
import DialogActions from '@mui/material/DialogActions'
import DialogContentText from '@mui/material/DialogContentText'
const DialogsAlert = () => {
// States
const [open, setOpen] = useState(false)
const handleClickOpen = () => setOpen(true)
const handleClose = () => setOpen(false)
return (
<>
<Button variant='outlined' onClick={handleClickOpen}>
Open dialog
</Button>
<Dialog
open={open}
onClose={handleClose}
aria-labelledby='alert-dialog-title'
aria-describedby='alert-dialog-description'
closeAfterTransition={false}
>
<DialogTitle id='alert-dialog-title'>Use Google's location service?</DialogTitle>
<DialogContent>
<DialogContentText id='alert-dialog-description'>
Let Google help apps determine location. This means sending anonymous location data to Google, even when no
apps are running.
</DialogContentText>
</DialogContent>
<DialogActions>
<Button onClick={handleClose} variant='outlined' color='secondary'>
Disagree
</Button>
<Button onClick={handleClose} variant='contained'>
Agree
</Button>
</DialogActions>
</Dialog>
</>
)
}
export default DialogsAlert
You can also use any of the transitions that you like. Use TransitionComponent
prop for the transition.
- TSX
- JS
// React Imports
import { forwardRef, useState } from 'react'
import type { ReactElement, Ref } from 'react'
// MUI Imports
import Button from '@mui/material/Button'
import Dialog from '@mui/material/Dialog'
import DialogTitle from '@mui/material/DialogTitle'
import DialogContent from '@mui/material/DialogContent'
import DialogActions from '@mui/material/DialogActions'
import DialogContentText from '@mui/material/DialogContentText'
import Slide from '@mui/material/Slide'
import type { SlideProps } from '@mui/material/Slide'
const Transition = forwardRef(function Transition(
props: SlideProps & { children?: ReactElement<any, any> },
ref: Ref<unknown>
) {
return <Slide direction='up' ref={ref} {...props} />
})
const DialogsTransition = () => {
// States
const [open, setOpen] = useState<boolean>(false)
const handleClickOpen = () => setOpen(true)
const handleClose = () => setOpen(false)
return (
<>
<Button variant='outlined' onClick={handleClickOpen}>
Slide in alert dialog
</Button>
<Dialog
open={open}
keepMounted
onClose={handleClose}
TransitionComponent={Transition}
aria-labelledby='alert-dialog-slide-title'
aria-describedby='alert-dialog-slide-description'
closeAfterTransition={false}
>
<DialogTitle id='alert-dialog-slide-title'>Use Google's location service?</DialogTitle>
<DialogContent>
<DialogContentText id='alert-dialog-slide-description'>
Let Google help apps determine location. This means sending anonymous location data to Google, even when no
apps are running.
</DialogContentText>
</DialogContent>
<DialogActions>
<Button onClick={handleClose} variant='outlined' color='secondary'>
Disagree
</Button>
<Button onClick={handleClose} variant='contained'>
Agree
</Button>
</DialogActions>
</Dialog>
</>
)
}
export default DialogsTransition
// React Imports
import { forwardRef, useState } from 'react'
// MUI Imports
import Button from '@mui/material/Button'
import Dialog from '@mui/material/Dialog'
import DialogTitle from '@mui/material/DialogTitle'
import DialogContent from '@mui/material/DialogContent'
import DialogActions from '@mui/material/DialogActions'
import DialogContentText from '@mui/material/DialogContentText'
import Slide from '@mui/material/Slide'
const Transition = forwardRef(function Transition(props, ref) {
return <Slide direction='up' ref={ref} {...props} />
})
const DialogsTransition = () => {
// States
const [open, setOpen] = useState(false)
const handleClickOpen = () => setOpen(true)
const handleClose = () => setOpen(false)
return (
<>
<Button variant='outlined' onClick={handleClickOpen}>
Slide in alert dialog
</Button>
<Dialog
open={open}
keepMounted
onClose={handleClose}
TransitionComponent={Transition}
aria-labelledby='alert-dialog-slide-title'
aria-describedby='alert-dialog-slide-description'
closeAfterTransition={false}
>
<DialogTitle id='alert-dialog-slide-title'>Use Google's location service?</DialogTitle>
<DialogContent>
<DialogContentText id='alert-dialog-slide-description'>
Let Google help apps determine location. This means sending anonymous location data to Google, even when no
apps are running.
</DialogContentText>
</DialogContent>
<DialogActions>
<Button onClick={handleClose} variant='outlined' color='secondary'>
Disagree
</Button>
<Button onClick={handleClose} variant='contained'>
Agree
</Button>
</DialogActions>
</Dialog>
</>
)
}
export default DialogsTransition
Form dialogs allow users to fill out form fields within a dialog.
- TSX
- JS
// React Imports
import { useState } from 'react'
// MUI Imports
import Button from '@mui/material/Button'
import Dialog from '@mui/material/Dialog'
import TextField from '@mui/material/TextField'
import DialogTitle from '@mui/material/DialogTitle'
import DialogContent from '@mui/material/DialogContent'
import DialogActions from '@mui/material/DialogActions'
import DialogContentText from '@mui/material/DialogContentText'
const DialogsForm = () => {
// States
const [open, setOpen] = useState<boolean>(false)
const handleClickOpen = () => setOpen(true)
const handleClose = () => setOpen(false)
return (
<>
<Button variant='outlined' onClick={handleClickOpen}>
Open form dialog
</Button>
<Dialog open={open} onClose={handleClose} aria-labelledby='form-dialog-title' closeAfterTransition={false}>
<DialogTitle id='form-dialog-title'>Subscribe</DialogTitle>
<DialogContent>
<DialogContentText className='mbe-3'>
To subscribe to this website, please enter your email address here. We will send updates occasionally.
</DialogContentText>
<TextField id='name' autoFocus fullWidth type='email' label='Email Address' />
</DialogContent>
<DialogActions>
<Button onClick={handleClose} variant='outlined' color='secondary'>
Disagree
</Button>
<Button onClick={handleClose} variant='contained'>
Agree
</Button>
</DialogActions>
</Dialog>
</>
)
}
export default DialogsForm
// React Imports
import { useState } from 'react'
// MUI Imports
import Button from '@mui/material/Button'
import Dialog from '@mui/material/Dialog'
import TextField from '@mui/material/TextField'
import DialogTitle from '@mui/material/DialogTitle'
import DialogContent from '@mui/material/DialogContent'
import DialogActions from '@mui/material/DialogActions'
import DialogContentText from '@mui/material/DialogContentText'
const DialogsForm = () => {
// States
const [open, setOpen] = useState(false)
const handleClickOpen = () => setOpen(true)
const handleClose = () => setOpen(false)
return (
<>
<Button variant='outlined' onClick={handleClickOpen}>
Open form dialog
</Button>
<Dialog open={open} onClose={handleClose} aria-labelledby='form-dialog-title' closeAfterTransition={false}>
<DialogTitle id='form-dialog-title'>Subscribe</DialogTitle>
<DialogContent>
<DialogContentText className='mbe-3'>
To subscribe to this website, please enter your email address here. We will send updates occasionally.
</DialogContentText>
<TextField id='name' autoFocus fullWidth type='email' label='Email Address' />
</DialogContent>
<DialogActions>
<Button onClick={handleClose} variant='outlined' color='secondary'>
Disagree
</Button>
<Button onClick={handleClose} variant='contained'>
Agree
</Button>
</DialogActions>
</Dialog>
</>
)
}
export default DialogsForm
You can customize the component the way you want using styled
hook.
- TSX
- JS
// React Imports
import { useState } from 'react'
// MUI Imports
import Button from '@mui/material/Button'
import Dialog from '@mui/material/Dialog'
import IconButton from '@mui/material/IconButton'
import Typography from '@mui/material/Typography'
import DialogTitle from '@mui/material/DialogTitle'
import DialogContent from '@mui/material/DialogContent'
import DialogActions from '@mui/material/DialogActions'
const DialogsCustomized = () => {
// States
const [open, setOpen] = useState<boolean>(false)
const handleClickOpen = () => setOpen(true)
const handleClose = () => setOpen(false)
return (
<>
<Button variant='outlined' onClick={handleClickOpen}>
Open dialog
</Button>
<Dialog onClose={handleClose} aria-labelledby='customized-dialog-title' open={open} closeAfterTransition={false}>
<DialogTitle id='customized-dialog-title' className='p-4'>
<Typography variant='h6' component='span'>
Modal title
</Typography>
<IconButton
aria-label='close'
onClick={handleClose}
className='absolute top-2.5 right-2.5 text-[var(--mui-palette-grey-500)]'
>
<i className='ri-close-line' />
</IconButton>
</DialogTitle>
<DialogContent dividers className='p-4'>
<Typography className='mbe-4'>
Chupa chups jelly-o candy sweet roll wafer cake chocolate bar. Brownie sweet roll topping cake chocolate
cake cheesecake tiramisu chocolate cake. Jujubes liquorice chocolate bar pastry. Chocolate jujubes caramels
pastry.
</Typography>
<Typography className='mbe-4'>
Ice cream marshmallow dragée bonbon croissant. Carrot cake sweet donut ice cream bonbon oat cake danish
sugar plum. Gingerbread gummies marzipan gingerbread.
</Typography>
<Typography>
Soufflé toffee ice cream. Jelly-o pudding sweet roll bonbon. Marshmallow liquorice icing. Jelly beans
chocolate bar chocolate marzipan candy fruitcake jujubes.
</Typography>
</DialogContent>
<DialogActions className='p-4 !pt-4'>
<Button onClick={handleClose}>Save changes</Button>
</DialogActions>
</Dialog>
</>
)
}
export default DialogsCustomized
// React Imports
import { useState } from 'react'
// MUI Imports
import Button from '@mui/material/Button'
import Dialog from '@mui/material/Dialog'
import IconButton from '@mui/material/IconButton'
import Typography from '@mui/material/Typography'
import DialogTitle from '@mui/material/DialogTitle'
import DialogContent from '@mui/material/DialogContent'
import DialogActions from '@mui/material/DialogActions'
const DialogsCustomized = () => {
// States
const [open, setOpen] = useState(false)
const handleClickOpen = () => setOpen(true)
const handleClose = () => setOpen(false)
return (
<>
<Button variant='outlined' onClick={handleClickOpen}>
Open dialog
</Button>
<Dialog onClose={handleClose} aria-labelledby='customized-dialog-title' open={open} closeAfterTransition={false}>
<DialogTitle id='customized-dialog-title' className='p-4'>
<Typography variant='h6' component='span'>
Modal title
</Typography>
<IconButton
aria-label='close'
onClick={handleClose}
className='absolute top-2.5 right-2.5 text-[var(--mui-palette-grey-500)]'
>
<i className='ri-close-line' />
</IconButton>
</DialogTitle>
<DialogContent dividers className='p-4'>
<Typography className='mbe-4'>
Chupa chups jelly-o candy sweet roll wafer cake chocolate bar. Brownie sweet roll topping cake chocolate
cake cheesecake tiramisu chocolate cake. Jujubes liquorice chocolate bar pastry. Chocolate jujubes caramels
pastry.
</Typography>
<Typography className='mbe-4'>
Ice cream marshmallow dragée bonbon croissant. Carrot cake sweet donut ice cream bonbon oat cake danish
sugar plum. Gingerbread gummies marzipan gingerbread.
</Typography>
<Typography>
Soufflé toffee ice cream. Jelly-o pudding sweet roll bonbon. Marshmallow liquorice icing. Jelly beans
chocolate bar chocolate marzipan candy fruitcake jujubes.
</Typography>
</DialogContent>
<DialogActions className='p-4 !pt-4'>
<Button onClick={handleClose}>Save changes</Button>
</DialogActions>
</Dialog>
</>
)
}
export default DialogsCustomized
Add fullScreen
prop with Dialog
component for a full screen dialog.
- TSX
- JS
// React Imports
import { useState } from 'react'
// MUI Imports
import Button from '@mui/material/Button'
import Dialog from '@mui/material/Dialog'
import DialogTitle from '@mui/material/DialogTitle'
import DialogContent from '@mui/material/DialogContent'
import DialogActions from '@mui/material/DialogActions'
import DialogContentText from '@mui/material/DialogContentText'
const DialogsFullScreen = () => {
// States
const [open, setOpen] = useState<boolean>(false)
const handleClickOpen = () => setOpen(true)
const handleClose = () => setOpen(false)
return (
<>
<Button variant='outlined' onClick={handleClickOpen}>
Open dialog
</Button>
<Dialog
fullScreen
onClose={handleClose}
aria-labelledby='full-screen-dialog-title'
open={open}
closeAfterTransition={false}
>
<DialogTitle id='alert-dialog-title'>Use Google's location service?</DialogTitle>
<DialogContent>
<DialogContentText id='alert-dialog-description'>
Let Google help apps determine location. This means sending anonymous location data to Google, even when no
apps are running.
</DialogContentText>
</DialogContent>
<DialogActions>
<Button onClick={handleClose} variant='outlined' color='secondary'>
Disagree
</Button>
<Button onClick={handleClose} variant='contained'>
Agree
</Button>
</DialogActions>
</Dialog>
</>
)
}
export default DialogsFullScreen
// React Imports
import { useState } from 'react'
// MUI Imports
import Button from '@mui/material/Button'
import Dialog from '@mui/material/Dialog'
import DialogTitle from '@mui/material/DialogTitle'
import DialogContent from '@mui/material/DialogContent'
import DialogActions from '@mui/material/DialogActions'
import DialogContentText from '@mui/material/DialogContentText'
const DialogsFullScreen = () => {
// States
const [open, setOpen] = useState(false)
const handleClickOpen = () => setOpen(true)
const handleClose = () => setOpen(false)
return (
<>
<Button variant='outlined' onClick={handleClickOpen}>
Open dialog
</Button>
<Dialog
fullScreen
onClose={handleClose}
aria-labelledby='full-screen-dialog-title'
open={open}
closeAfterTransition={false}
>
<DialogTitle id='alert-dialog-title'>Use Google's location service?</DialogTitle>
<DialogContent>
<DialogContentText id='alert-dialog-description'>
Let Google help apps determine location. This means sending anonymous location data to Google, even when no
apps are running.
</DialogContentText>
</DialogContent>
<DialogActions>
<Button onClick={handleClose} variant='outlined' color='secondary'>
Disagree
</Button>
<Button onClick={handleClose} variant='contained'>
Agree
</Button>
</DialogActions>
</Dialog>
</>
)
}
export default DialogsFullScreen
You can set a dialog maximum width by using the maxWidth
enumerable in combination with the fullWidth
boolean. When thefullWidth
property is true, the dialog will adapt based on the maxWidth
value.
- TSX
- JS
// React Imports
import { useState } from 'react'
import type { ChangeEvent } from 'react'
// MUI Imports
import Select from '@mui/material/Select'
import Button from '@mui/material/Button'
import Switch from '@mui/material/Switch'
import Dialog from '@mui/material/Dialog'
import MenuItem from '@mui/material/MenuItem'
import { styled } from '@mui/material/styles'
import InputLabel from '@mui/material/InputLabel'
import DialogTitle from '@mui/material/DialogTitle'
import FormControl from '@mui/material/FormControl'
import DialogActions from '@mui/material/DialogActions'
import DialogContent from '@mui/material/DialogContent'
import FormControlLabel from '@mui/material/FormControlLabel'
import DialogContentText from '@mui/material/DialogContentText'
import type { SelectChangeEvent } from '@mui/material/Select'
import type { Breakpoint } from '@mui/material/styles'
// Styled component for the form
const Form = styled('form')({
margin: 'auto',
display: 'flex',
width: 'fit-content',
flexDirection: 'column'
})
const DialogsSizes = () => {
// States
const [open, setOpen] = useState<boolean>(false)
const [fullWidth, setFullWidth] = useState<boolean>(true)
const [maxWidth, setMaxWidth] = useState<Breakpoint>('sm')
const handleClickOpen = () => setOpen(true)
const handleClose = () => setOpen(false)
const handleMaxWidthChange = (event: SelectChangeEvent) => {
setMaxWidth(event.target.value as Breakpoint)
}
const handleFullWidthChange = (event: ChangeEvent<HTMLInputElement>) => {
setFullWidth(event.target.checked)
}
return (
<>
<Button variant='outlined' onClick={handleClickOpen}>
Open dialog
</Button>
<Dialog
open={open}
maxWidth={maxWidth}
fullWidth={fullWidth}
onClose={handleClose}
aria-labelledby='max-width-dialog-title'
closeAfterTransition={false}
>
<DialogTitle id='max-width-dialog-title'>Optional sizes</DialogTitle>
<DialogContent>
<DialogContentText className='mbe-4'>
You can set my maximum width and whether to adapt or not.
</DialogContentText>
<Form noValidate>
<FormControl className='mbs-2 min-is-[120px]'>
<InputLabel htmlFor='max-width'>maxWidth</InputLabel>
<Select
label='maxWidth'
value={maxWidth}
onChange={handleMaxWidthChange}
inputProps={{
name: 'max-width',
id: 'max-width'
}}
>
<MenuItem value={false as any}>false</MenuItem>
<MenuItem value='xs'>xs</MenuItem>
<MenuItem value='sm'>sm</MenuItem>
<MenuItem value='md'>md</MenuItem>
<MenuItem value='lg'>lg</MenuItem>
<MenuItem value='xl'>xl</MenuItem>
</Select>
</FormControl>
<FormControlLabel
label='Full width'
className='mbs-2'
control={<Switch checked={fullWidth} onChange={handleFullWidthChange} />}
/>
</Form>
</DialogContent>
<DialogActions>
<Button onClick={handleClose} variant='outlined' color='secondary'>
Close
</Button>
</DialogActions>
</Dialog>
</>
)
}
export default DialogsSizes
// React Imports
import { useState } from 'react'
// MUI Imports
import Select from '@mui/material/Select'
import Button from '@mui/material/Button'
import Switch from '@mui/material/Switch'
import Dialog from '@mui/material/Dialog'
import MenuItem from '@mui/material/MenuItem'
import { styled } from '@mui/material/styles'
import InputLabel from '@mui/material/InputLabel'
import DialogTitle from '@mui/material/DialogTitle'
import FormControl from '@mui/material/FormControl'
import DialogActions from '@mui/material/DialogActions'
import DialogContent from '@mui/material/DialogContent'
import FormControlLabel from '@mui/material/FormControlLabel'
import DialogContentText from '@mui/material/DialogContentText'
// Styled component for the form
const Form = styled('form')({
margin: 'auto',
display: 'flex',
width: 'fit-content',
flexDirection: 'column'
})
const DialogsSizes = () => {
// States
const [open, setOpen] = useState(false)
const [fullWidth, setFullWidth] = useState(true)
const [maxWidth, setMaxWidth] = useState('sm')
const handleClickOpen = () => setOpen(true)
const handleClose = () => setOpen(false)
const handleMaxWidthChange = event => {
setMaxWidth(event.target.value)
}
const handleFullWidthChange = event => {
setFullWidth(event.target.checked)
}
return (
<>
<Button variant='outlined' onClick={handleClickOpen}>
Open dialog
</Button>
<Dialog
open={open}
maxWidth={maxWidth}
fullWidth={fullWidth}
onClose={handleClose}
aria-labelledby='max-width-dialog-title'
closeAfterTransition={false}
>
<DialogTitle id='max-width-dialog-title'>Optional sizes</DialogTitle>
<DialogContent>
<DialogContentText className='mbe-4'>
You can set my maximum width and whether to adapt or not.
</DialogContentText>
<Form noValidate>
<FormControl className='mbs-2 min-is-[120px]'>
<InputLabel htmlFor='max-width'>maxWidth</InputLabel>
<Select
label='maxWidth'
value={maxWidth}
onChange={handleMaxWidthChange}
inputProps={{
name: 'max-width',
id: 'max-width'
}}
>
<MenuItem value={false}>false</MenuItem>
<MenuItem value='xs'>xs</MenuItem>
<MenuItem value='sm'>sm</MenuItem>
<MenuItem value='md'>md</MenuItem>
<MenuItem value='lg'>lg</MenuItem>
<MenuItem value='xl'>xl</MenuItem>
</Select>
</FormControl>
<FormControlLabel
label='Full width'
className='mbs-2'
control={<Switch checked={fullWidth} onChange={handleFullWidthChange} />}
/>
</Form>
</DialogContent>
<DialogActions>
<Button onClick={handleClose} variant='outlined' color='secondary'>
Close
</Button>
</DialogActions>
</Dialog>
</>
)
}
export default DialogsSizes
Make a full screen dialog at particular screen sizes only by using useMediaQuery
hook.
- TSX
- JS
// React Imports
import { useState } from 'react'
// MUI Imports
import Button from '@mui/material/Button'
import Dialog from '@mui/material/Dialog'
import DialogTitle from '@mui/material/DialogTitle'
import useMediaQuery from '@mui/material/useMediaQuery'
import DialogActions from '@mui/material/DialogActions'
import DialogContent from '@mui/material/DialogContent'
import DialogContentText from '@mui/material/DialogContentText'
import { useTheme } from '@mui/material/styles'
const DialogsRespoFullScreen = () => {
// States
const [open, setOpen] = useState<boolean>(false)
// Hooks
const theme = useTheme()
const fullScreen = useMediaQuery(theme.breakpoints.down('sm'))
const handleClickOpen = () => setOpen(true)
const handleClose = () => setOpen(false)
return (
<>
<Button variant='outlined' onClick={handleClickOpen}>
Open responsive dialog
</Button>
<Dialog
fullScreen={fullScreen}
open={open}
onClose={handleClose}
aria-labelledby='responsive-dialog-title'
closeAfterTransition={false}
>
<DialogTitle id='responsive-dialog-title'>Use Google's location service?</DialogTitle>
<DialogContent>
<DialogContentText>
Let Google help apps determine location. This means sending anonymous location data to Google, even when no
apps are running.
</DialogContentText>
</DialogContent>
<DialogActions>
<Button onClick={handleClose} variant='outlined' color='secondary'>
Disagree
</Button>
<Button onClick={handleClose} variant='contained'>
Agree
</Button>
</DialogActions>
</Dialog>
</>
)
}
export default DialogsRespoFullScreen
// React Imports
import { useState } from 'react'
// MUI Imports
import Button from '@mui/material/Button'
import Dialog from '@mui/material/Dialog'
import DialogTitle from '@mui/material/DialogTitle'
import useMediaQuery from '@mui/material/useMediaQuery'
import DialogActions from '@mui/material/DialogActions'
import DialogContent from '@mui/material/DialogContent'
import DialogContentText from '@mui/material/DialogContentText'
import { useTheme } from '@mui/material/styles'
const DialogsRespoFullScreen = () => {
// States
const [open, setOpen] = useState(false)
// Hooks
const theme = useTheme()
const fullScreen = useMediaQuery(theme.breakpoints.down('sm'))
const handleClickOpen = () => setOpen(true)
const handleClose = () => setOpen(false)
return (
<>
<Button variant='outlined' onClick={handleClickOpen}>
Open responsive dialog
</Button>
<Dialog
fullScreen={fullScreen}
open={open}
onClose={handleClose}
aria-labelledby='responsive-dialog-title'
closeAfterTransition={false}
>
<DialogTitle id='responsive-dialog-title'>Use Google's location service?</DialogTitle>
<DialogContent>
<DialogContentText>
Let Google help apps determine location. This means sending anonymous location data to Google, even when no
apps are running.
</DialogContentText>
</DialogContent>
<DialogActions>
<Button onClick={handleClose} variant='outlined' color='secondary'>
Disagree
</Button>
<Button onClick={handleClose} variant='contained'>
Agree
</Button>
</DialogActions>
</Dialog>
</>
)
}
export default DialogsRespoFullScreen
Use disableEscapeKeyDown
prop to disable 'Escape' key and use onClose
prop to disable the backdrop.
- TSX
- JS
// React Imports
import { useState } from 'react'
// MUI Imports
import Button from '@mui/material/Button'
import Dialog from '@mui/material/Dialog'
import DialogTitle from '@mui/material/DialogTitle'
import DialogContent from '@mui/material/DialogContent'
import DialogActions from '@mui/material/DialogActions'
import DialogContentText from '@mui/material/DialogContentText'
const DialogsConfirmation = () => {
// States
const [open, setOpen] = useState<boolean>(false)
const handleClickOpen = () => setOpen(true)
const handleClose = () => setOpen(false)
return (
<>
<Button variant='outlined' onClick={handleClickOpen}>
Open dialog
</Button>
<Dialog
open={open}
disableEscapeKeyDown
aria-labelledby='alert-dialog-title'
aria-describedby='alert-dialog-description'
onClose={(event, reason) => {
if (reason !== 'backdropClick') {
handleClose()
}
}}
closeAfterTransition={false}
>
<DialogTitle id='alert-dialog-title'>Use Google's location service?</DialogTitle>
<DialogContent>
<DialogContentText id='alert-dialog-description'>
Let Google help apps determine location. This means sending anonymous location data to Google, even when no
apps are running.
</DialogContentText>
</DialogContent>
<DialogActions>
<Button onClick={handleClose} variant='outlined' color='secondary'>
Disagree
</Button>
<Button onClick={handleClose} variant='contained'>
Agree
</Button>
</DialogActions>
</Dialog>
</>
)
}
export default DialogsConfirmation
// React Imports
import { useState } from 'react'
// MUI Imports
import Button from '@mui/material/Button'
import Dialog from '@mui/material/Dialog'
import DialogTitle from '@mui/material/DialogTitle'
import DialogContent from '@mui/material/DialogContent'
import DialogActions from '@mui/material/DialogActions'
import DialogContentText from '@mui/material/DialogContentText'
const DialogsConfirmation = () => {
// States
const [open, setOpen] = useState(false)
const handleClickOpen = () => setOpen(true)
const handleClose = () => setOpen(false)
return (
<>
<Button variant='outlined' onClick={handleClickOpen}>
Open dialog
</Button>
<Dialog
open={open}
disableEscapeKeyDown
aria-labelledby='alert-dialog-title'
aria-describedby='alert-dialog-description'
onClose={(event, reason) => {
if (reason !== 'backdropClick') {
handleClose()
}
}}
closeAfterTransition={false}
>
<DialogTitle id='alert-dialog-title'>Use Google's location service?</DialogTitle>
<DialogContent>
<DialogContentText id='alert-dialog-description'>
Let Google help apps determine location. This means sending anonymous location data to Google, even when no
apps are running.
</DialogContentText>
</DialogContent>
<DialogActions>
<Button onClick={handleClose} variant='outlined' color='secondary'>
Disagree
</Button>
<Button onClick={handleClose} variant='contained'>
Agree
</Button>
</DialogActions>
</Dialog>
</>
)
}
export default DialogsConfirmation
scroll=paper
scrolls within the paper element and scroll=body
scrolls within the body element.
- TSX
- JS
// React Imports
import { useEffect, useRef, useState } from 'react'
// MUI Imports
import Button from '@mui/material/Button'
import Dialog from '@mui/material/Dialog'
import DialogTitle from '@mui/material/DialogTitle'
import DialogContent from '@mui/material/DialogContent'
import DialogActions from '@mui/material/DialogActions'
import DialogContentText from '@mui/material/DialogContentText'
import type { DialogProps } from '@mui/material/Dialog'
// Third-party Imports
import classnames from 'classnames'
const DialogsScroll = () => {
// States
const [open, setOpen] = useState<boolean>(false)
const [scroll, setScroll] = useState<DialogProps['scroll']>('paper')
// Refs
const descriptionElementRef = useRef<HTMLElement>(null)
const handleClickOpen = (scrollType: DialogProps['scroll']) => () => {
setOpen(true)
setScroll(scrollType)
}
const handleClose = () => setOpen(false)
useEffect(() => {
if (open) {
const { current: descriptionElement } = descriptionElementRef
if (descriptionElement !== null) {
descriptionElement.focus()
}
}
}, [open])
return (
<div className='flex gap-4'>
<Button variant='outlined' onClick={handleClickOpen('paper')}>
scroll=paper
</Button>
<Button variant='outlined' onClick={handleClickOpen('body')}>
scroll=body
</Button>
<Dialog
open={open}
scroll={scroll}
onClose={handleClose}
aria-labelledby='scroll-dialog-title'
aria-describedby='scroll-dialog-description'
closeAfterTransition={false}
>
<DialogTitle id='scroll-dialog-title'>Subscribe</DialogTitle>
<DialogContent dividers={scroll === 'paper'}>
<DialogContentText id='scroll-dialog-description' ref={descriptionElementRef} tabIndex={-1}>
{[...new Array(50)].map(
() =>
`Cotton candy sesame snaps toffee chupa chups caramels. Candy icing gummi bears pastry cake icing brownie
oat cake. Tootsie roll biscuit chupa chups apple pie muffin jelly-o caramels. Muffin chocolate bar sweet
cookie chupa chups.`
)}
</DialogContentText>
</DialogContent>
<DialogActions className={classnames({ '!pt-5': scroll === 'paper' })}>
<Button onClick={handleClose} variant='outlined' color='secondary'>
Cancel
</Button>
<Button onClick={handleClose} variant='contained'>
Subscribe
</Button>
</DialogActions>
</Dialog>
</div>
)
}
export default DialogsScroll
// React Imports
import { useEffect, useRef, useState } from 'react'
// MUI Imports
import Button from '@mui/material/Button'
import Dialog from '@mui/material/Dialog'
import DialogTitle from '@mui/material/DialogTitle'
import DialogContent from '@mui/material/DialogContent'
import DialogActions from '@mui/material/DialogActions'
import DialogContentText from '@mui/material/DialogContentText'
// Third-party Imports
import classnames from 'classnames'
const DialogsScroll = () => {
// States
const [open, setOpen] = useState(false)
const [scroll, setScroll] = useState('paper')
// Refs
const descriptionElementRef = useRef(null)
const handleClickOpen = scrollType => () => {
setOpen(true)
setScroll(scrollType)
}
const handleClose = () => setOpen(false)
useEffect(() => {
if (open) {
const { current: descriptionElement } = descriptionElementRef
if (descriptionElement !== null) {
descriptionElement.focus()
}
}
}, [open])
return (
<div className='flex gap-4'>
<Button variant='outlined' onClick={handleClickOpen('paper')}>
scroll=paper
</Button>
<Button variant='outlined' onClick={handleClickOpen('body')}>
scroll=body
</Button>
<Dialog
open={open}
scroll={scroll}
onClose={handleClose}
aria-labelledby='scroll-dialog-title'
aria-describedby='scroll-dialog-description'
closeAfterTransition={false}
>
<DialogTitle id='scroll-dialog-title'>Subscribe</DialogTitle>
<DialogContent dividers={scroll === 'paper'}>
<DialogContentText id='scroll-dialog-description' ref={descriptionElementRef} tabIndex={-1}>
{[...new Array(50)].map(
() => `Cotton candy sesame snaps toffee chupa chups caramels. Candy icing gummi bears pastry cake icing brownie
oat cake. Tootsie roll biscuit chupa chups apple pie muffin jelly-o caramels. Muffin chocolate bar sweet
cookie chupa chups.`
)}
</DialogContentText>
</DialogContent>
<DialogActions className={classnames({ '!pt-5': scroll === 'paper' })}>
<Button onClick={handleClose} variant='outlined' color='secondary'>
Cancel
</Button>
<Button onClick={handleClose} variant='contained'>
Subscribe
</Button>
</DialogActions>
</Dialog>
</div>
)
}
export default DialogsScroll