UNPKG

@atlaskit/editor-plugin-insert-block

Version:

Insert block plugin for @atlaskit/editor-core

53 lines • 3.42 kB
import React, { useCallback, useContext, useSyncExternalStore } from 'react'; import { MENU } from '@atlaskit/editor-common/quick-insert/keys'; import { PlainOutsideClickTargetRefContext } from '@atlaskit/editor-common/ui'; import withOuterListeners from '@atlaskit/editor-common/with-outer-listeners'; import { RegisteredInsertMenu } from './RegisteredInsertMenu'; var EMPTY_COMPONENTS = []; var subscribeToNothing = function subscribeToNothing() { return function () {}; }; var RegisteredInsertMenuContainer = function RegisteredInsertMenuContainer(_ref) { var children = _ref.children; var setOutsideClickTargetRef = useContext(PlainOutsideClickTargetRefContext); return /*#__PURE__*/React.createElement("div", { ref: setOutsideClickTargetRef }, children); }; var RegisteredInsertMenuWithListeners = withOuterListeners(RegisteredInsertMenuContainer); export var RegisteredInsertMenuContent = function RegisteredInsertMenuContent(_ref2) { var _api$uiControlRegistr2, _api$uiControlRegistr3, _api$quickInsert, _api$analytics, _api$quickInsert2; var api = _ref2.api, editorView = _ref2.editorView, isOffline = _ref2.isOffline, maxHeight = _ref2.maxHeight, onClose = _ref2.onClose, onDismiss = _ref2.onDismiss, onSelect = _ref2.onSelect, target = _ref2.target; var getComponents = useCallback(function () { var _api$uiControlRegistr; var components = api === null || api === void 0 || (_api$uiControlRegistr = api.uiControlRegistry) === null || _api$uiControlRegistr === void 0 ? void 0 : _api$uiControlRegistr.actions.getComponents(MENU.key); return components !== null && components !== void 0 && components.length ? components : EMPTY_COMPONENTS; }, [api]); var components = useSyncExternalStore((_api$uiControlRegistr2 = api === null || api === void 0 || (_api$uiControlRegistr3 = api.uiControlRegistry) === null || _api$uiControlRegistr3 === void 0 ? void 0 : _api$uiControlRegistr3.actions.subscribe) !== null && _api$uiControlRegistr2 !== void 0 ? _api$uiControlRegistr2 : subscribeToNothing, getComponents, getComponents); var onClickOutside = useCallback(function (event) { if (event.target instanceof Node && target !== null && target !== void 0 && target.contains(event.target)) { return; } onDismiss(); }, [onDismiss, target]); return /*#__PURE__*/React.createElement(RegisteredInsertMenuWithListeners, { handleClickOutside: onClickOutside }, /*#__PURE__*/React.createElement(RegisteredInsertMenu, { components: components, editorView: editorView, emptyStateHandler: api === null || api === void 0 || (_api$quickInsert = api.quickInsert) === null || _api$quickInsert === void 0 || (_api$quickInsert = _api$quickInsert.sharedState.currentState()) === null || _api$quickInsert === void 0 ? void 0 : _api$quickInsert.emptyStateHandler, fireAnalyticsEvent: api === null || api === void 0 || (_api$analytics = api.analytics) === null || _api$analytics === void 0 ? void 0 : _api$analytics.actions.fireAnalyticsEvent, getItemRank: api === null || api === void 0 || (_api$quickInsert2 = api.quickInsert) === null || _api$quickInsert2 === void 0 || (_api$quickInsert2 = _api$quickInsert2.sharedState.currentState()) === null || _api$quickInsert2 === void 0 ? void 0 : _api$quickInsert2.getItemRank, isOffline: isOffline, maxHeight: maxHeight, onClose: onClose, onSelect: onSelect })); };