UNPKG

@pinuts/bsr-uikit-relaunch

Version:

BSR UI-KIT Relaunch

110 lines (107 loc) 4.44 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = void 0; var _react = _interopRequireWildcard(require("react")); var _propTypes = _interopRequireDefault(require("prop-types")); var _reactI18next = require("react-i18next"); var _uuid = require("uuid"); var _ModalModule = _interopRequireDefault(require("./Modal.module.scss")); var _Close = _interopRequireDefault(require("../../icons/Close.jsx")); var _isWindowAvailable = require("../../utils/isWindowAvailable.js"); function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; } function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); } function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; } const SmallModal = _ref => { let { show, onClose, children, id, className, modalLabel, 'aria-labelledby': ariaLabelledBy, 'aria-describedby': ariaDescribedBy } = _ref; const { t } = (0, _reactI18next.useTranslation)(); const divRef = (0, _react.useRef)(null); const contentRef = (0, _react.useRef)(null); const currentId = (0, _uuid.v4)(); const modalLabelId = `small-modal-label-${currentId}`; const modalDescriptionId = `small-modal-description-${currentId}`; (0, _react.useEffect)(() => { if (show) { const handleEscapeKeyPress = event => { if (event.key === 'Escape') { onClose(); } }; const handleClickOutside = event => { if (contentRef.current && !contentRef.current.contains(event.target)) { onClose(); } }; if ((0, _isWindowAvailable.isWindowAvailable)()) { document.addEventListener('keydown', handleEscapeKeyPress); document.addEventListener('mousedown', handleClickOutside); } // Set focus to the modal content when it opens if (contentRef.current) { contentRef.current.focus(); } return () => { if ((0, _isWindowAvailable.isWindowAvailable)()) { document.removeEventListener('keydown', handleEscapeKeyPress); document.removeEventListener('mousedown', handleClickOutside); } }; } }, [show, onClose]); if (!show) { return null; } return /*#__PURE__*/_react.default.createElement("div", { ref: divRef, id: id, className: [className, _ModalModule.default.smallModal].join(' '), "aria-labelledby": ariaLabelledBy || modalLabelId, "aria-describedby": ariaDescribedBy || modalDescriptionId }, modalLabel && /*#__PURE__*/_react.default.createElement("div", { "aria-hidden": true, id: modalLabelId, className: "d-none" }, modalLabel), /*#__PURE__*/_react.default.createElement("button", { type: "button", className: _ModalModule.default.closeButton, "aria-label": t('modal.aria.close'), onClick: onClose }, /*#__PURE__*/_react.default.createElement("span", { "aria-hidden": "true", className: _ModalModule.default.closeButtonText }, t('general.close')), /*#__PURE__*/_react.default.createElement(_Close.default, { width: 20, height: 20, stroke: "black", fill: "black" })), /*#__PURE__*/_react.default.createElement("div", { ref: contentRef, className: _ModalModule.default.content, id: ariaDescribedBy || modalDescriptionId, tabIndex: -1 }, children)); }; // add prop types SmallModal.propTypes = { show: _propTypes.default.bool.isRequired, onClose: _propTypes.default.func.isRequired, children: _propTypes.default.node.isRequired, id: _propTypes.default.string, className: _propTypes.default.string, modalLabel: _propTypes.default.string, 'aria-labelledby': _propTypes.default.string, 'aria-describedby': _propTypes.default.string }; var _default = exports.default = SmallModal;