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

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:

  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

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 />