UNPKG

@atlaskit/editor-plugin-insert-block

Version:

Insert block plugin for @atlaskit/editor-core

58 lines 2.85 kB
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 }; };