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