@bigbinary/neetoui
Version:
neetoUI drives the experience at all neeto products
190 lines (183 loc) • 7.59 kB
JavaScript
import _extends from '@babel/runtime/helpers/extends';
import _defineProperty from '@babel/runtime/helpers/defineProperty';
import _slicedToArray from '@babel/runtime/helpers/slicedToArray';
import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties';
import React__default, { useState, useRef } from 'react';
import classnames from 'classnames';
import { Close } from '@bigbinary/neeto-icons';
import { u as useOverlayManager, a as useOverlay, P as Portal, C as CSSTransition, B as Backdrop } from './useOverlayManager-AZIGhUYS.js';
import Button from './Button.js';
import 'react-router-dom';
import 'qs';
import Typography from './Typography.js';
import '@babel/runtime/helpers/esm/extends';
import '@babel/runtime/helpers/esm/objectWithoutPropertiesLoose';
import '@babel/runtime/helpers/esm/inheritsLoose';
import 'react-dom';
import 'ramda';
import '@bigbinary/neeto-hotkeys';
import './overlayManager.js';
import '@babel/runtime/helpers/classCallCheck';
import '@babel/runtime/helpers/createClass';
import './index-Dxaw6gl9.js';
import '@bigbinary/neeto-cist';
import './en-CIkXIYyl.js';
import '@babel/runtime/helpers/toConsumableArray';
import 'dayjs';
import 'dayjs/plugin/localeData';
import 'dayjs/plugin/utc';
import 'dayjs/plugin/weekday';
import 'dayjs/plugin/weekOfYear';
import './Spinner.js';
import './Tooltip.js';
import '@tippyjs/react';
import 'tippy.js';
var Body = function Body(_ref) {
var children = _ref.children,
className = _ref.className,
dataCy = _ref.dataCy;
return /*#__PURE__*/React__default.createElement("div", {
className: classnames("neeto-ui-modal__body", className),
"data-cy": dataCy !== null && dataCy !== void 0 ? dataCy : "modal-body"
}, children);
};
var Footer = function Footer(_ref) {
var children = _ref.children,
className = _ref.className,
dataCy = _ref.dataCy;
return /*#__PURE__*/React__default.createElement("div", {
className: classnames("neeto-ui-modal__footer", className),
"data-cy": dataCy !== null && dataCy !== void 0 ? dataCy : "modal-footer"
}, children);
};
var Header = function Header(_ref) {
var _ref$description = _ref.description,
description = _ref$description === void 0 ? "" : _ref$description,
children = _ref.children,
className = _ref.className,
dataCy = _ref.dataCy;
return /*#__PURE__*/React__default.createElement("div", {
className: classnames("neeto-ui-modal__header", className),
"data-cy": dataCy !== null && dataCy !== void 0 ? dataCy : "modal-header"
}, children, description && /*#__PURE__*/React__default.createElement("div", {
className: "neeto-ui-modal__header-desc",
"data-cy": "modal-header-desc"
}, /*#__PURE__*/React__default.createElement(Typography, {
lineHeight: "normal",
style: "body2"
}, description)));
};
var MemoizedChildren = /*#__PURE__*/React__default.memo(function (_ref) {
var children = _ref.children;
return children;
}, function (_, _ref2) {
var shouldUpdate = _ref2.shouldUpdate;
return !shouldUpdate;
});
MemoizedChildren.displayName = "MemoizedChildren";
var _excluded = ["size", "isOpen", "onClose", "children", "finalFocusRef", "initialFocusRef", "className", "closeOnEsc", "closeButton", "backdropClassName", "blockScrollOnMount", "closeOnOutsideClick", "forceRender"];
var SIZES = {
small: "small",
medium: "medium",
large: "large",
fullScreen: "fullScreen"
};
var Modal = function Modal(_ref) {
var _ref$size = _ref.size,
size = _ref$size === void 0 ? SIZES.medium : _ref$size,
_ref$isOpen = _ref.isOpen,
isOpen = _ref$isOpen === void 0 ? false : _ref$isOpen,
_ref$onClose = _ref.onClose,
onClose = _ref$onClose === void 0 ? function () {} : _ref$onClose,
children = _ref.children,
finalFocusRef = _ref.finalFocusRef,
initialFocusRef = _ref.initialFocusRef,
_ref$className = _ref.className,
className = _ref$className === void 0 ? "" : _ref$className,
_ref$closeOnEsc = _ref.closeOnEsc,
closeOnEsc = _ref$closeOnEsc === void 0 ? true : _ref$closeOnEsc,
_ref$closeButton = _ref.closeButton,
closeButton = _ref$closeButton === void 0 ? true : _ref$closeButton,
_ref$backdropClassNam = _ref.backdropClassName,
backdropClassName = _ref$backdropClassNam === void 0 ? "" : _ref$backdropClassNam,
_ref$blockScrollOnMou = _ref.blockScrollOnMount,
blockScrollOnMount = _ref$blockScrollOnMou === void 0 ? true : _ref$blockScrollOnMou,
_ref$closeOnOutsideCl = _ref.closeOnOutsideClick,
closeOnOutsideClick = _ref$closeOnOutsideCl === void 0 ? true : _ref$closeOnOutsideCl,
_ref$forceRender = _ref.forceRender,
forceRender = _ref$forceRender === void 0 ? false : _ref$forceRender,
otherProps = _objectWithoutProperties(_ref, _excluded);
var _useState = useState(false),
_useState2 = _slicedToArray(_useState, 2),
hasTransitionCompleted = _useState2[0],
setHasTransitionCompleted = _useState2[1];
var modalWrapper = useRef(null);
var backdropRef = useRef(null);
useOverlayManager(modalWrapper, isOpen);
var _useOverlay = useOverlay({
isOpen: isOpen,
initialFocusRef: initialFocusRef,
finalFocusRef: finalFocusRef,
overlayWrapper: modalWrapper,
onClose: onClose,
backdropRef: backdropRef,
closeOnOutsideClick: closeOnOutsideClick,
closeOnEsc: closeOnEsc,
blockScrollOnMount: blockScrollOnMount,
hasTransitionCompleted: hasTransitionCompleted
}),
handleOverlayClose = _useOverlay.handleOverlayClose,
setFocusField = _useOverlay.setFocusField;
var isFullScreenModal = size === SIZES.fullScreen;
return /*#__PURE__*/React__default.createElement(Portal, {
rootId: "neeto-ui-portal"
}, /*#__PURE__*/React__default.createElement(CSSTransition, {
unmountOnExit: true,
appear: isOpen,
classNames: "neeto-ui-modal",
"in": isOpen,
timeout: 300,
onEntered: function onEntered() {
return setHasTransitionCompleted(true);
},
onExited: function onExited() {
return setHasTransitionCompleted(false);
}
}, /*#__PURE__*/React__default.createElement(Backdrop, {
"data-testid": "backdrop",
key: "modal-backdrop",
ref: backdropRef,
className: classnames("neeto-ui-modal__backdrop", {
"neeto-ui-modal__backdrop--fullscreen": isFullScreenModal
}, backdropClassName)
}, /*#__PURE__*/React__default.createElement("div", _extends({
"aria-modal": true,
key: "modal-wrapper",
ref: modalWrapper,
role: "dialog",
className: classnames("neeto-ui-modal__wrapper", _defineProperty({
"neeto-ui-modal__wrapper--small": size === SIZES.small,
"neeto-ui-modal__wrapper--medium": size === SIZES.medium,
"neeto-ui-modal__wrapper--large": size === SIZES.large,
"neeto-ui-modal__wrapper--fullscreen": isFullScreenModal
}, className, className))
}, otherProps), closeButton && /*#__PURE__*/React__default.createElement(Button, {
"aria-label": "Close",
className: "neeto-ui-modal__close",
"data-cy": "modal-close-button",
"data-testid": "close-button",
icon: Close,
size: isFullScreenModal ? "large" : "small",
style: isFullScreenModal ? "secondary" : "text",
onClick: handleOverlayClose
}), /*#__PURE__*/React__default.createElement(MemoizedChildren, {
shouldUpdate: isOpen || forceRender
}, typeof children === "function" ? children({
setFocusField: setFocusField
}) : children)))));
};
Modal.Header = Header;
Modal.Body = Body;
Modal.Footer = Footer;
export { Modal as default };
//# sourceMappingURL=Modal.js.map