@atlaskit/editor-plugin-block-menu
Version:
BlockMenu plugin for @atlaskit/editor-core
113 lines (112 loc) • 4.58 kB
JavaScript
/**
* 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 = {
[]: {
[]: 100,
[]: 200,
[]: 300
},
[]: {
[]: 100,
[]: 200,
[]: 300
},
[]: {
[]: 100,
[]: 200,
[]: 300
},
[]: {
[]: 100,
[]: 200,
[]: 300
},
[]: {
[]: 100,
[]: 200,
[]: 300
},
[]: {
[]: 100,
[]: 200,
[]: 300
},
[]: {
[]: 100,
[]: 200,
[]: 300
},
[]: {
[]: 100,
[]: 200,
[]: 300
},
[]: {
[]: 100,
[]: 200,
[]: 300
},
[]: {
[]: 100,
[]: 200,
[]: 300
},
[]: {
[]: 100,
[]: 200,
[]: 300
},
[]: {
[]: 100,
[]: 200,
[]: 300
},
[]: {
[]: 100,
[]: 200,
[]: 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);
};