@atlaskit/editor-plugin-insert-block
Version:
Insert block plugin for @atlaskit/editor-core
58 lines • 2.85 kB
JavaScript
import _slicedToArray from "@babel/runtime/helpers/slicedToArray";
import { useState, useCallback } from 'react';
import { isDetachedElement } from '../utils/utils';
export var usePopupManager = function usePopupManager() {
var config = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
var _useState = useState(false),
_useState2 = _slicedToArray(_useState, 2),
isOpen = _useState2[0],
setIsOpen = _useState2[1];
var _useState3 = useState(false),
_useState4 = _slicedToArray(_useState3, 2),
isOpenedByKeyboard = _useState4[0],
setIsOpenedByKeyboard = _useState4[1];
var toggle = 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 = 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 = 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 = useCallback(function (e) {
if (e.target instanceof HTMLElement && !isDetachedElement(e.target)) {
close();
}
}, [close]);
var handleKeyboardOpen = 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
};
};