Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
Modal.js 1.01 KiB
import React from 'react'
import ReactDOM from 'react-dom'
import styled from 'styled-components'

const createModalRootElement = () => {
  const modalDiv = document.createElement('div')
  modalDiv.setAttribute('id', 'ps-modal-root')
  document.body.insertAdjacentElement('beforeend', modalDiv)

  return modalDiv
}

const modalRoot = createModalRootElement()

class Modal extends React.Component {
  render() {
    const { component: Component, overlayColor, ...rest } = this.props
    return ReactDOM.createPortal(
      <ModalRoot
        onClick={rest.dismissable ? rest.hideModal : null}
        overlayColor={overlayColor}
      >
        <Component {...rest} />
      </ModalRoot>,
      modalRoot,
    )
  }
}

export default Modal

const ModalRoot = styled.div`
  align-items: center;
  display: flex;
  top: 0;
  left: 0;
  bottom: 0;
  right: 0;
  position: fixed;
  justify-content: center;
  background-color: ${({ overlayColor }) =>
    overlayColor || 'rgba(0, 0, 0, 0.8)'};
  z-index: ${({ theme }) => theme.modalIndex};
`