UNPKG

@atlaskit/editor-plugin-block-menu

Version:

BlockMenu plugin for @atlaskit/editor-core

113 lines (112 loc) 4.58 kB
/** * Suggested transformations mapping for each block type. * Based on the Block Menu Compatibility Matrix: * https://hello.atlassian.net/wiki/spaces/egcuc/pages/5868774224/Block+Menu+Compatibility+Matrix#Suggested-for-each-block-type * * This mapping defines which transform items should appear in the TRANSFORM_SUGGESTED_MENU_SECTION * for each block type, ranked by priority (lower rank = higher priority). * * Structure: * { * [sourceNodeType]: { * [targetMenuItemKey]: rank * } * } */ import { TRANSFORM_STRUCTURE_PANEL_MENU_ITEM, TRANSFORM_STRUCTURE_EXPAND_MENU_ITEM, TRANSFORM_STRUCTURE_LAYOUT_MENU_ITEM, TRANSFORM_STRUCTURE_QUOTE_MENU_ITEM, TRANSFORM_STRUCTURE_CODE_BLOCK_MENU_ITEM, TRANSFORM_STRUCTURE_BULLETED_LIST_MENU_ITEM, TRANSFORM_STRUCTURE_NUMBERED_LIST_MENU_ITEM, TRANSFORM_STRUCTURE_TASK_LIST_MENU_ITEM, TRANSFORM_HEADINGS_H1_MENU_ITEM, TRANSFORM_HEADINGS_H2_MENU_ITEM, TRANSFORM_STRUCTURE_PARAGRAPH_MENU_ITEM } from '@atlaskit/editor-common/block-menu'; export const BLOCK_MENU_NODE_TYPES = { PARAGRAPH: 'paragraph', EXPAND: 'expand', BLOCKQUOTE: 'blockquote', LAYOUT_SECTION: 'layoutSection', PANEL: 'panel', CODE_BLOCK: 'codeBlock', DECISION: 'decisionList', BULLET_LIST: 'bulletList', ORDERED_LIST: 'orderedList', HEADING: 'heading', TASK_LIST: 'taskList', MEDIA_SINGLE: 'mediaSingle', EXTENSION: 'extension', BODIED_EXTENSION: 'bodiedExtension', BLOCK_CARD: 'blockCard', EMBED_CARD: 'embedCard', TABLE: 'table' }; export const TRANSFORM_SUGGESTED_ITEMS_RANK = { [BLOCK_MENU_NODE_TYPES.PARAGRAPH]: { [TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key]: 100, [TRANSFORM_HEADINGS_H1_MENU_ITEM.key]: 200, [TRANSFORM_HEADINGS_H2_MENU_ITEM.key]: 300 }, [BLOCK_MENU_NODE_TYPES.EXPAND]: { [TRANSFORM_STRUCTURE_LAYOUT_MENU_ITEM.key]: 100, [TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key]: 200, [TRANSFORM_STRUCTURE_PARAGRAPH_MENU_ITEM.key]: 300 }, [BLOCK_MENU_NODE_TYPES.BLOCKQUOTE]: { [TRANSFORM_STRUCTURE_EXPAND_MENU_ITEM.key]: 100, [TRANSFORM_STRUCTURE_LAYOUT_MENU_ITEM.key]: 200, [TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key]: 300 }, [BLOCK_MENU_NODE_TYPES.LAYOUT_SECTION]: { [TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key]: 100, [TRANSFORM_STRUCTURE_EXPAND_MENU_ITEM.key]: 200, [TRANSFORM_STRUCTURE_PARAGRAPH_MENU_ITEM.key]: 300 }, [BLOCK_MENU_NODE_TYPES.PANEL]: { [TRANSFORM_STRUCTURE_QUOTE_MENU_ITEM.key]: 100, [TRANSFORM_STRUCTURE_CODE_BLOCK_MENU_ITEM.key]: 200, [TRANSFORM_STRUCTURE_EXPAND_MENU_ITEM.key]: 300 }, [BLOCK_MENU_NODE_TYPES.CODE_BLOCK]: { [TRANSFORM_STRUCTURE_EXPAND_MENU_ITEM.key]: 100, [TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key]: 200, [TRANSFORM_STRUCTURE_PARAGRAPH_MENU_ITEM.key]: 300 }, [BLOCK_MENU_NODE_TYPES.DECISION]: { [TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key]: 100, [TRANSFORM_STRUCTURE_QUOTE_MENU_ITEM.key]: 200, [TRANSFORM_STRUCTURE_LAYOUT_MENU_ITEM.key]: 300 }, [BLOCK_MENU_NODE_TYPES.BULLET_LIST]: { [TRANSFORM_STRUCTURE_NUMBERED_LIST_MENU_ITEM.key]: 100, [TRANSFORM_STRUCTURE_QUOTE_MENU_ITEM.key]: 200, [TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key]: 300 }, [BLOCK_MENU_NODE_TYPES.ORDERED_LIST]: { [TRANSFORM_STRUCTURE_TASK_LIST_MENU_ITEM.key]: 100, [TRANSFORM_STRUCTURE_BULLETED_LIST_MENU_ITEM.key]: 200, [TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key]: 300 }, [BLOCK_MENU_NODE_TYPES.HEADING]: { [TRANSFORM_STRUCTURE_PARAGRAPH_MENU_ITEM.key]: 100, [TRANSFORM_STRUCTURE_BULLETED_LIST_MENU_ITEM.key]: 200, [TRANSFORM_STRUCTURE_QUOTE_MENU_ITEM.key]: 300 }, [BLOCK_MENU_NODE_TYPES.TASK_LIST]: { [TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key]: 100, [TRANSFORM_STRUCTURE_NUMBERED_LIST_MENU_ITEM.key]: 200, [TRANSFORM_STRUCTURE_BULLETED_LIST_MENU_ITEM.key]: 300 }, [BLOCK_MENU_NODE_TYPES.MEDIA_SINGLE]: { [TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key]: 100, [TRANSFORM_STRUCTURE_EXPAND_MENU_ITEM.key]: 200, [TRANSFORM_STRUCTURE_QUOTE_MENU_ITEM.key]: 300 }, [BLOCK_MENU_NODE_TYPES.EXTENSION]: { [TRANSFORM_STRUCTURE_EXPAND_MENU_ITEM.key]: 100, [TRANSFORM_STRUCTURE_PANEL_MENU_ITEM.key]: 200, [TRANSFORM_STRUCTURE_LAYOUT_MENU_ITEM.key]: 300 } }; export const getSuggestedItemsForNodeType = nodeType => { return TRANSFORM_SUGGESTED_ITEMS_RANK[nodeType]; }; export const getSortedSuggestedItems = nodeType => { const suggestions = getSuggestedItemsForNodeType(nodeType); if (!suggestions) { return []; } return Object.entries(suggestions).sort(([, rankA], [, rankB]) => rankA - rankB).map(([key]) => key); };