All files / modal index.js

80% Statements 8/10
100% Branches 6/6
57.14% Functions 4/7
75% Lines 6/8
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62  1x 1x         35x         307x       1x 1x                                                                                        
 
import React from 'react'
import {Motion, spring} from 'react-motion'
 
/**
 * Modal component
 */
var Modal = ({header, body, footer, visible, toggle}) => (
  <Motion defaultStyle={{opacity: 0, scale: 0}} style={{
    opacity: visible ? spring(1) : 0,
    scale: visible ? spring(1) : 0
  }}>
    {style =>
      visible &&
        <div
          className='Modal-overlay'
          onClick={() => toggle(false)}
          onTouchEnd={() => toggle(false)}
          style={{
            opacity: style.opacity
          }}
        >
          <div
            className='Modal'
            onClick={(e) => e.stopPropagation()}
            onTouchEnd={(e) => e.stopPropagation()}
            style={{
              transform: `scale(${style.scale})`
            }}
          >
            <div className='Modal-content'>
              <div className='Modal-header'>
                {header}
              </div>
              <div className='Modal-body'>
                {body}
              </div>
            </div>
            <div className='Modal-footer'>
              {footer}
            </div>
          </div>
        </div>
    }
  </Motion>
)
 
Modal.propTypes = {
  header: React.PropTypes.element,
  body: React.PropTypes.element,
  footer: React.PropTypes.element,
  visible: React.PropTypes.bool,
  toggle: React.PropTypes.func
}
 
Modal.defaultProps = {
  visible: false,
  toggle: () => {}
}
 
export default Modal