UNPKG

@atlaskit/editor-plugin-insert-block

Version:

Insert block plugin for @atlaskit/editor-core

53 lines • 3.27 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'; const EMPTY_COMPONENTS = []; const subscribeToNothing = () => () => {}; const RegisteredInsertMenuContainer = ({ children }) => { const setOutsideClickTargetRef = useContext(PlainOutsideClickTargetRefContext); return /*#__PURE__*/React.createElement("div", { ref: setOutsideClickTargetRef }, children); }; const RegisteredInsertMenuWithListeners = withOuterListeners(RegisteredInsertMenuContainer); export const RegisteredInsertMenuContent = ({ api, editorView, isOffline, maxHeight, onClose, onDismiss, onSelect, target }) => { var _api$uiControlRegistr2, _api$uiControlRegistr3, _api$quickInsert, _api$quickInsert$shar, _api$analytics, _api$quickInsert2, _api$quickInsert2$sha; const getComponents = useCallback(() => { var _api$uiControlRegistr; const components = api === null || api === void 0 ? 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]); const components = useSyncExternalStore((_api$uiControlRegistr2 = api === null || api === void 0 ? 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); const onClickOutside = useCallback(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 ? void 0 : (_api$quickInsert = api.quickInsert) === null || _api$quickInsert === void 0 ? void 0 : (_api$quickInsert$shar = _api$quickInsert.sharedState.currentState()) === null || _api$quickInsert$shar === void 0 ? void 0 : _api$quickInsert$shar.emptyStateHandler, fireAnalyticsEvent: api === null || api === void 0 ? void 0 : (_api$analytics = api.analytics) === null || _api$analytics === void 0 ? void 0 : _api$analytics.actions.fireAnalyticsEvent, getItemRank: api === null || api === void 0 ? void 0 : (_api$quickInsert2 = api.quickInsert) === null || _api$quickInsert2 === void 0 ? void 0 : (_api$quickInsert2$sha = _api$quickInsert2.sharedState.currentState()) === null || _api$quickInsert2$sha === void 0 ? void 0 : _api$quickInsert2$sha.getItemRank, isOffline: isOffline, maxHeight: maxHeight, onClose: onClose, onSelect: onSelect })); };