UNPKG

@helpscout/hsds-react

Version:

React component library for Help Scout's Design System

154 lines (132 loc) 5.5 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); exports.__esModule = true; exports.SimpleModalWithTrigger = void 0; var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends")); var _react = _interopRequireWildcard(require("react")); var _SimpleModal = _interopRequireDefault(require("./SimpleModal")); var _usePortal = require("../../hooks/usePortal"); var _Button = _interopRequireDefault(require("../Button")); var _reactHotkeysHook = require("react-hotkeys-hook"); var _SimpleModal2 = require("./SimpleModal.utils"); var _jsxRuntime = require("react/jsx-runtime"); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; } function reducer(state, type) { switch (type) { case 'OPEN_1': return (0, _extends2.default)({}, state, { isOpen1: true }); case 'CLOSE_1': return (0, _extends2.default)({}, state, { isOpen1: state.isOpen2 ? true : false }); case 'OPEN_2': return (0, _extends2.default)({}, state, { isOpen2: true }); case 'CLOSE_2': return (0, _extends2.default)({}, state, { isOpen2: false }); default: return state; } } var SimpleModalWithTrigger = function SimpleModalWithTrigger() { var _useReducer = (0, _react.useReducer)(reducer, { isOpen1: false, isOpen2: false }), state = _useReducer[0], dispatch = _useReducer[1]; var _useState = (0, _react.useState)(true), buttonVisible = _useState[0], setButtonVisible = _useState[1]; (0, _reactHotkeysHook.useHotkeys)('k', function (e) { e.preventDefault(); e.stopPropagation(); alert('global k hotkey triggered'); }, { filter: function filter(e) { return (0, _SimpleModal2.allowGlobalHotkeys)(e.target); } }); (0, _react.useEffect)(function () { function handleEvent(e) { if (e.key === 'j') { if ((0, _SimpleModal2.allowGlobalHotkeys)(e.target)) { alert('global j hotkey triggered'); } } } document.body.addEventListener('keydown', handleEvent); return function () { document.body.removeEventListener('keydown', handleEvent); }; }, []); return /*#__PURE__*/(0, _jsxRuntime.jsxs)(_jsxRuntime.Fragment, { children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, { kind: "primary", onClick: function onClick() { setButtonVisible(true); dispatch('OPEN_1'); }, children: "Open modal" }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_usePortal.Portal, { selector: "#root", children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_SimpleModal.default, { show: state.isOpen1, className: "first-modal", focusModalOnShow: true, ariaHidden: state.isOpen2, trapFocus: true, onClose: function onClose(e) { dispatch('CLOSE_1'); }, closeOnClickOutside: "modal", children: [/*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, { kind: "primary", onClick: function onClick() { return dispatch('OPEN_2'); }, children: "Open second modal" }), buttonVisible ? /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, { style: { marginTop: '20px' }, size: "xs", theme: "green", onClick: function onClick() { setButtonVisible(false); }, children: "remove this button" }) : null] }) }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_usePortal.Portal, { selector: "#root", children: /*#__PURE__*/(0, _jsxRuntime.jsxs)(_SimpleModal.default, { id: "second-modal", className: "second-modal", show: state.isOpen2, height: "200px", width: "200px", focusModalOnShow: true, trapFocus: true, onClose: function onClose(e) { dispatch('CLOSE_2'); document.querySelector('#simple-modal').focus(); }, closeOnClickOutside: "modal", children: [/*#__PURE__*/(0, _jsxRuntime.jsx)("div", { children: "My second modal" }), /*#__PURE__*/(0, _jsxRuntime.jsx)(_Button.default, { kind: "primary", children: "Another button" })] }) })] }); }; exports.SimpleModalWithTrigger = SimpleModalWithTrigger;