UNPKG

@atlaskit/editor-plugin-insert-block

Version:

Insert block plugin for @atlaskit/editor-core

56 lines • 2.47 kB
import React, { createContext, useCallback, useContext, useMemo } from 'react'; import { INPUT_METHOD } from '@atlaskit/editor-common/analytics/types/enums'; import { insertSelectedItem } from '@atlaskit/editor-common/insert'; import { QuickInsertProvider } from '@atlaskit/editor-common/quick-insert/provider'; // Preview updates must remain live while react-virtualized caches row elements during scrolling. export var RegisteredInsertMenuPreviewContext = /*#__PURE__*/createContext(undefined); export var RegisteredInsertMenuItem = function RegisteredInsertMenuItem(_ref) { var _registration$compone; var editorView = _ref.editorView, id = _ref.id, isOffline = _ref.isOffline, isSelected = _ref.isSelected, menuOpenId = _ref.menuOpenId, onClose = _ref.onClose, registration = _ref.registration, surfaceContext = _ref.surfaceContext; var Component = (_registration$compone = registration.component) !== null && _registration$compone !== void 0 ? _registration$compone : React.Fragment; var activePreviewItemKey = useContext(RegisteredInsertMenuPreviewContext); var isPreviewActive = activePreviewItemKey === registration.key; var select = useCallback(function (selectionHandler) { // Close first so a registered item may safely focus the editor or open its picker. onClose(); queueMicrotask(function () { var state = editorView.state; var insert = function insert(content) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; return insertSelectedItem(content, options)(state, state.tr, state.selection.head); }; var transaction = selectionHandler({ insert: insert, source: INPUT_METHOD.INSERT_MENU }); if (transaction) { editorView.dispatch(transaction); } }); }, [editorView, onClose]); var contextValue = useMemo(function () { return { editorView: editorView, isOffline: isOffline, item: { id: id, isPreviewActive: isPreviewActive, isSelected: isSelected }, menuOpenId: menuOpenId, select: select, surface: 'toolbar', surfaceContext: surfaceContext }; }, [editorView, id, isOffline, isPreviewActive, isSelected, menuOpenId, select, surfaceContext]); return /*#__PURE__*/React.createElement(QuickInsertProvider, { value: contextValue }, /*#__PURE__*/React.createElement(Component, null, null)); };