@helpscout/hsds-react
Version:
React component library for Help Scout's Design System
154 lines (132 loc) • 5.5 kB
JavaScript
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;
;