You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
2.5 KiB
2.5 KiB
Renders Modal
Usage:
import { Modal, ModalProps, ModalInline } from '@adminjs/design-system'
Modal can be rendered either inline or as a regular Modal.
Inline usage
<ModalInline {...modalProps} />
Modal usage
const [isVisible, setIsVisible] = useState(false)
modalProps = {
/** ... **/
onOverlayClick: () => setIsVisible(false),
onClose: () => setIsVisible(false),
}
<Box>
<Label>Modal Trigger</Label>
<Button
onClick={() => setIsVisible(!isVisible)}
>
Toggle Modal
</Button>
{isVisible && <Modal {...modalProps} />}
</Box>
Passing content
You can also pass the values in 2 ways:
- by using just the {@link ModalProps} - as shown in the previous examples.
- by using the Children
Playground
Let me show you 3 live examples of using the Modal component:
Passing children
The most versatile way, but, the one, which requires you to "design" the modal
return (
<Box variant="grey">
<Box py="xxl" width={1}>
<ModalInline>
<Header.H4>I am header</Header.H4>
<Text>
I am info text
</Text>
<Box>
<Button>Confirm?</Button>
</Box>
</ModalInline>
</Box>
</Box>
)
Passing props
You have everything out of the box
const variant = 'danger'
const modalProps = {
label: 'Someone broke your car',
icon: 'Car',
title: 'Behold',
variant,
subTitle: 'Something wrong is happening!!!',
buttons: [
{ label: 'Cancel' },
{ label: 'Delete', variant },
],
}
return (
<Box variant="grey">
<Box py="xxl" width={1}>
<ModalInline {...modalProps} />
</Box>
</Box>
)
Real modal
Handling modal visibility with the useState hook.
const Wrapper = () => {
const [isVisible, setIsVisible] = React.useState(false)
const variant = 'success'
const modalProps = {
label: 'Your car is 100% fine',
icon: 'Car',
title: 'It is ok',
variant,
subTitle: 'Something wrong is NOT happening!!!',
buttons: [
{ label: 'Cancel' },
{ label: 'Delete', variant },
],
onOverlayClick: () => setIsVisible(false),
onClose: () => setIsVisible(false),
}
return (
<Box py="100px">
<Button
onClick={() => setIsVisible(!isVisible)}
>
Toggle Modal
</Button>
{isVisible && <Modal {...modalProps} />}
</Box>
)
}
return <Wrapper />