@atlaskit/editor-plugin-block-menu
Version:
BlockMenu plugin for @atlaskit/editor-core
33 lines (32 loc) • 1.22 kB
JavaScript
import { expandSelectionToBlockRange } from '@atlaskit/editor-common/selection';
import { getBlockNodesInRange } from '../../editor-commands/transform-node-utils/utils';
import { getSortedSuggestedItems } from '../utils/suggested-items-rank';
/**
* Pure function to calculate suggested items based on selection and menu components.
*/
export const getSuggestedItemsFromSelection = (menuItemsMap, currentSelection) => {
if (menuItemsMap.size === 0 || !currentSelection) {
return [];
}
const {
range
} = expandSelectionToBlockRange(currentSelection);
if (!range) {
return [];
}
const blockNodes = getBlockNodesInRange(range);
if (blockNodes.length === 0) {
return [];
}
const firstNodeType = blockNodes[0].type.name;
const allSameType = blockNodes.every(node => node.type.name === firstNodeType);
if (!allSameType) {
return [];
}
const nodeTypeName = firstNodeType;
const sortedKeys = getSortedSuggestedItems(nodeTypeName);
return sortedKeys.map(key => menuItemsMap.get(key)).filter(item => {
var _item$isHidden;
return item !== undefined && !((_item$isHidden = item.isHidden) !== null && _item$isHidden !== void 0 && _item$isHidden.call(item));
});
};