UNPKG

coreui

Version:

Platform Core UI

261 lines (199 loc) 7.73 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; var _react = require('react'); var _react2 = _interopRequireDefault(_react); var _ModalDialog = require('./ModalDialog'); var _ModalDialog2 = _interopRequireDefault(_ModalDialog); var _Shared = require('../../Shared'); var _Shared2 = _interopRequireDefault(_Shared); var _Modal = require('../../theme/components/Modal'); var _Modal2 = _interopRequireDefault(_Modal); var _Modal3 = require('coreui-deps/lib/react-overlays/lib/Modal'); var _Modal4 = _interopRequireDefault(_Modal3); var _compose = require('recompose/compose'); var _compose2 = _interopRequireDefault(_compose); var _dedupe = require('classnames/dedupe'); var _dedupe2 = _interopRequireDefault(_dedupe); var _mapProps = require('recompose/mapProps'); var _mapProps2 = _interopRequireDefault(_mapProps); var _withContext = require('recompose/withContext'); var _withContext2 = _interopRequireDefault(_withContext); var _withHandlers = require('recompose/withHandlers'); var _withHandlers2 = _interopRequireDefault(_withHandlers); var _ramda = require('ramda'); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } var modalStyle = { bottom: 0, left: 0, position: 'fixed', right: 0, top: 0, zIndex: 1040 }; var systemStyles = { backdrop: _extends({}, modalStyle, { backgroundColor: '#000', opacity: 0.4, zIndex: 'auto' }), modal: modalStyle }; var modalProps = function modalProps(props) { var backdrop = props.backdrop, buttons = props.buttons, className = props.className, headerContent = props.headerContent, onCancelClick = props.onCancelClick, sheet = props.sheet, style = props.style, theme = props.theme; return (0, _ramda.merge)(props, { backdrop: !!backdrop, backdropClassName: (0, _dedupe2.default)(sheet.classes.backdrop, theme.classes.backdrop, className), backdropStyle: theme.styles.backdrop, className: (0, _dedupe2.default)(sheet.classes.modal, theme.classes.modal, className), dialogProps: { buttons: buttons, headerContent: headerContent, onCancelClick: onCancelClick, sheet: sheet, theme: theme }, show: true, style: (0, _ramda.merge)(theme.styles.modal, style) }); }; var ModalBase = function ModalBase(_ref) { var children = _ref.children, dialogProps = _ref.dialogProps, rest = _objectWithoutProperties(_ref, ['children', 'dialogProps']); return _react2.default.createElement( _Modal4.default, rest, _react2.default.createElement( _ModalDialog2.default, dialogProps, children ) ); }; ModalBase.propTypes = { children: _react.PropTypes.node, dialogProps: _react.PropTypes.object }; var ModalContainer = (0, _compose2.default)((0, _withHandlers2.default)({ onCancelClick: function onCancelClick(props) { return props.onBackdropClick || props.onEscapeKeyUp || props.onHide; } }), (0, _withContext2.default)({ coreuiModalContext: _react.PropTypes.object }, function (props) { return { coreuiModalContext: { onHide: props.onCancelClick } }; }), (0, _mapProps2.default)(modalProps))(ModalBase); var StyledModal = _Shared2.default.injectSheet(systemStyles)(ModalContainer); var Modal = function Modal(props) { return _react2.default.createElement( StyledModal, props, props.children ); }; var classes = _Modal2.default.classes; var options = _Modal2.default.options; var styles = _Modal2.default.styles; Modal.defaultProps = { backdrop: true, theme: { classes: classes, options: options, styles: styles } }; Modal.displayName = 'Modal'; Modal.propTypes = { /** * When `true` The modal will automatically shift focus to itself when it opens, and * replace it to the last focused element when it closes. This also * works correctly with any Modal children that have the `autoFocus` prop. * * Generally this should never be set to `false` as it makes the Modal less * accessible to assistive technologies, like screen readers. */ autoFocus: _react.PropTypes.bool, /** * Include a backdrop component. */ backdrop: _react.PropTypes.oneOfType([_react.PropTypes.bool, _react.PropTypes.oneOf(['static'])]), /** * The `timeout` of the backdrop transition if specified. This number is used to * ensure that transition callbacks are always fired, even if browser transition events are canceled. * * See the Transition `timeout` prop for more infomation. */ backdropTransitionTimeout: _react.PropTypes.number, children: _react.PropTypes.node, /** * A Node, Component instance, or function that returns either. The Modal is appended to it's container element. * * For the sake of assistive technologies, the container should usually be the document body, so that the rest of the * page content can be placed behind a virtual backdrop as well as a visual one. */ container: _react.PropTypes.any, /** * The `timeout` of the dialog transition if specified. This number is used to ensure that * transition callbacks are always fired, even if browser transition events are canceled. * * See the Transition `timeout` prop for more infomation. */ dialogTransitionTimeout: _react.PropTypes.number, /** * When `true` The modal will prevent focus from leaving the Modal while open. * * Generally this should never be set to `false` as it makes the Modal less * accessible to assistive technologies, like screen readers. */ enforceFocus: _react.PropTypes.bool, /** * Close the modal when escape key is pressed */ keyboard: _react.PropTypes.bool, /** * A callback fired when the backdrop, if specified, is clicked. */ onBackdropClick: _react.PropTypes.func, /** * Callback fired before the Modal transitions in */ onEnter: _react.PropTypes.func, /** * Callback fired after the Modal finishes transitioning in */ onEntered: _react.PropTypes.func, /** * Callback fired as the Modal begins to transition in */ onEntering: _react.PropTypes.func, /** * A callback fired when the escape key, if specified in `keyboard`, is pressed. */ onEscapeKeyUp: _react.PropTypes.func, /** * Callback fired right before the Modal transitions out */ onExit: _react.PropTypes.func, /** * Callback fired after the Modal finishes transitioning out */ onExited: _react.PropTypes.func, /** * Callback fired as the Modal begins to transition out */ onExiting: _react.PropTypes.func, /** * A callback fired when either the backdrop is clicked, or the escape key is pressed. * * The `onHide` callback only signals intent from the Modal, * you must actually set the `show` prop to `false` for the Modal to close. */ onHide: _react.PropTypes.func, /** * A callback fired when the Modal is opening. */ onShow: _react.PropTypes.func, theme: _react.PropTypes.oneOfType([_react.PropTypes.bool, _react.PropTypes.object]), /** * A `<Transition/>` component to use for the dialog and backdrop components. */ transition: _react.PropTypes.element }; _Shared2.default.registerComponent('Modal', Modal); exports.default = Modal;