UNPKG

@atlaskit/editor-plugin-insert-block

Version:

Insert block plugin for @atlaskit/editor-core

54 lines • 2.03 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 const RegisteredInsertMenuPreviewContext = /*#__PURE__*/createContext(undefined); export const RegisteredInsertMenuItem = ({ editorView, id, isOffline, isSelected, menuOpenId, onClose, registration, surfaceContext }) => { var _registration$compone; const Component = (_registration$compone = registration.component) !== null && _registration$compone !== void 0 ? _registration$compone : React.Fragment; const activePreviewItemKey = useContext(RegisteredInsertMenuPreviewContext); const isPreviewActive = activePreviewItemKey === registration.key; const select = useCallback(selectionHandler => { // Close first so a registered item may safely focus the editor or open its picker. onClose(); queueMicrotask(() => { const { state } = editorView; const insert = (content, options = {}) => insertSelectedItem(content, options)(state, state.tr, state.selection.head); const transaction = selectionHandler({ insert, source: INPUT_METHOD.INSERT_MENU }); if (transaction) { editorView.dispatch(transaction); } }); }, [editorView, onClose]); const contextValue = useMemo(() => ({ editorView, isOffline, item: { id, isPreviewActive, isSelected }, menuOpenId, select, surface: 'toolbar', surfaceContext }), [editorView, id, isOffline, isPreviewActive, isSelected, menuOpenId, select, surfaceContext]); return /*#__PURE__*/React.createElement(QuickInsertProvider, { value: contextValue }, /*#__PURE__*/React.createElement(Component, null, null)); };