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.
138 lines
2.5 KiB
138 lines
2.5 KiB
|
3 years ago
|
<img src="components/modal.png" />
|
||
|
|
|
||
|
|
Renders Modal
|
||
|
|
|
||
|
|
### Usage:
|
||
|
|
|
||
|
|
```javascript
|
||
|
|
import { Modal, ModalProps, ModalInline } from '@adminjs/design-system'
|
||
|
|
```
|
||
|
|
|
||
|
|
Modal can be rendered either inline or as a regular Modal.
|
||
|
|
|
||
|
|
#### Inline usage
|
||
|
|
|
||
|
|
```jsx
|
||
|
|
<ModalInline {...modalProps} />
|
||
|
|
```
|
||
|
|
|
||
|
|
#### Modal usage
|
||
|
|
|
||
|
|
```jsx
|
||
|
|
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:
|
||
|
|
|
||
|
|
1. by using just the {@link ModalProps} - as shown in the previous examples.
|
||
|
|
2. 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
|
||
|
|
|
||
|
|
```reactComponent
|
||
|
|
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
|
||
|
|
|
||
|
|
```reactComponent
|
||
|
|
|
||
|
|
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.
|
||
|
|
|
||
|
|
```reactComponent
|
||
|
|
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 />
|
||
|
|
```
|