Skip to content
Snippets Groups Projects
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
AbstractModal.jsx 1.99 KiB
import React from 'react'
import { Modal } from 'react-bootstrap'

export class BookBuilderModal extends React.Component {
  constructor (props) {
    super(props)
    this.performAction = this.performAction.bind(this)
  }

  performAction () {
    const { successAction } = this.props
    successAction()
  }

  renderHeader () {
    const { title } = this.props

    return (
      <Modal.Header>
        <Modal.Title>
          { title }
        </Modal.Title>
      </Modal.Header>
    )
  }

  renderBody () {
    const { body } = this.props

    return (
      <Modal.Body>
        { body }
      </Modal.Body>
    )
  }

  renderFooter () {
    const { successAction, successText, toggle } = this.props

    const successButton = (
      <a
        className='modal-button bb-modal-act'
        onClick={this.performAction}>
        { successText }
      </a>
    )

    const success = successAction ? successButton : null

    return (
      <Modal.Footer>
        <div className='modal-buttons-container'>

          <a className='modal-button modal-discard bb-modal-cancel'
            onClick={toggle}>
            Cancel
          </a>

          { success }

        </div>
      </Modal.Footer>
    )
  }

  render () {
    const { container, size, show, toggle } = this.props

    const header = this.renderHeader()
    const body = this.renderBody()
    const footer = this.renderFooter()

    return (
      <Modal
        bsSize={size || null}
        className='modal'
        container={container}
        onHide={toggle}
        show={show}
      >

        { header }
        { body }
        { footer }

      </Modal>
    )
  }
}

BookBuilderModal.propTypes = {
  body: React.PropTypes.object,
  container: React.PropTypes.object.isRequired,
  show: React.PropTypes.bool.isRequired,
  size: React.PropTypes.string,
  successAction: React.PropTypes.func,
  successText: React.PropTypes.string,
  title: React.PropTypes.string.isRequired,
  toggle: React.PropTypes.func.isRequired
}

export default BookBuilderModal