@atlaskit/editor-plugin-insert-block
Version:
Insert block plugin for @atlaskit/editor-core
65 lines (64 loc) • 3.19 kB
JavaScript
"use strict";
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.usePopupManager = void 0;
var _slicedToArray2 = _interopRequireDefault(require("@babel/runtime/helpers/slicedToArray"));
var _react = require("react");
var _utils = require("../utils/utils");
var usePopupManager = exports.usePopupManager = function usePopupManager() {
var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var _useState = (0, _react.useState)(false),
_useState2 = (0, _slicedToArray2.default)(_useState, 2),
isOpen = _useState2[0],
setIsOpen = _useState2[1];
var _useState3 = (0, _react.useState)(false),
_useState4 = (0, _slicedToArray2.default)(_useState3, 2),
isOpenedByKeyboard = _useState4[0],
setIsOpenedByKeyboard = _useState4[1];
var toggle = (0, _react.useCallback)(function (inputMethod) {
var _config$analytics, _config$analytics$onT;
var newState = !isOpen;
setIsOpen(newState);
if (newState) {
var _config$onOpen;
(_config$onOpen = config.onOpen) === null || _config$onOpen === void 0 || _config$onOpen.call(config, inputMethod);
} else {
var _config$onClose;
(_config$onClose = config.onClose) === null || _config$onClose === void 0 || _config$onClose.call(config);
}
(_config$analytics = config.analytics) === null || _config$analytics === void 0 || (_config$analytics$onT = _config$analytics.onToggle) === null || _config$analytics$onT === void 0 || _config$analytics$onT.call(_config$analytics, newState, inputMethod);
}, [isOpen, config]);
var close = (0, _react.useCallback)(function () {
var _config$onClose2, _config$analytics2, _config$analytics2$on;
setIsOpen(false);
(_config$onClose2 = config.onClose) === null || _config$onClose2 === void 0 || _config$onClose2.call(config);
(_config$analytics2 = config.analytics) === null || _config$analytics2 === void 0 || (_config$analytics2$on = _config$analytics2.onToggle) === null || _config$analytics2$on === void 0 || _config$analytics2$on.call(_config$analytics2, false);
}, [config]);
var handleEscapeKeydown = (0, _react.useCallback)(function () {
var _config$focusTarget;
close();
(_config$focusTarget = config.focusTarget) === null || _config$focusTarget === void 0 || (_config$focusTarget = _config$focusTarget.current) === null || _config$focusTarget === void 0 || _config$focusTarget.focus();
}, [close, config.focusTarget]);
var handleClickOutside = (0, _react.useCallback)(function (e) {
if (e.target instanceof HTMLElement && !(0, _utils.isDetachedElement)(e.target)) {
close();
}
}, [close]);
var handleKeyboardOpen = (0, _react.useCallback)(function (event) {
if (event.key === 'Enter' || event.key === ' ') {
setIsOpenedByKeyboard(true);
event.preventDefault();
}
}, []);
return {
isOpen: isOpen,
isOpenedByKeyboard: isOpenedByKeyboard,
toggle: toggle,
close: close,
handleEscapeKeydown: handleEscapeKeydown,
handleClickOutside: handleClickOutside,
handleKeyboardOpen: handleKeyboardOpen
};
};