@atlaskit/editor-plugin-insert-block
Version:
Insert block plugin for @atlaskit/editor-core
53 lines • 3.27 kB
JavaScript
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
}));
};