@atlaskit/editor-plugin-block-menu
Version:
BlockMenu plugin for @atlaskit/editor-core
25 lines • 1.59 kB
JavaScript
import { useMemo } from 'react';
import { useSharedPluginStateWithSelector } from '@atlaskit/editor-common/hooks';
import { createMenuItemsMap } from '../utils/createMenuItemsMap';
import { getSuggestedItemsFromSelection } from '../utils/getSuggestedItemsFromSelection';
export var useSuggestedItems = function useSuggestedItems(api) {
var _api$blockMenu;
var _useSharedPluginState = useSharedPluginStateWithSelector(api, ['blockControls', 'selection'], function (states) {
var _states$blockControls, _states$selectionStat;
return {
preservedSelection: (_states$blockControls = states.blockControlsState) === null || _states$blockControls === void 0 ? void 0 : _states$blockControls.preservedSelection,
selection: (_states$selectionStat = states.selectionState) === null || _states$selectionStat === void 0 ? void 0 : _states$selectionStat.selection
};
}),
preservedSelection = _useSharedPluginState.preservedSelection,
selection = _useSharedPluginState.selection;
var blockMenuComponents = api === null || api === void 0 || (_api$blockMenu = api.blockMenu) === null || _api$blockMenu === void 0 ? void 0 : _api$blockMenu.actions.getBlockMenuComponents();
var menuItemsMap = useMemo(function () {
return createMenuItemsMap(blockMenuComponents);
}, [blockMenuComponents]);
var suggestedItems = useMemo(function () {
var currentSelection = preservedSelection || selection;
return getSuggestedItemsFromSelection(menuItemsMap, currentSelection);
}, [menuItemsMap, preservedSelection, selection]);
return suggestedItems;
};