UNPKG

@atlaskit/editor-plugin-block-menu

Version:

BlockMenu plugin for @atlaskit/editor-core

67 lines 3.44 kB
import { expandSelectionToBlockRange } from '@atlaskit/editor-common/selection'; import { Fragment } from '@atlaskit/editor-prosemirror/model'; import { isTransformDisabledBasedOnStepsConfig } from '../editor-commands/transform-node-utils/transform'; import { toNodeTypeValue } from '../editor-commands/transform-node-utils/types'; import { getBlockNodesInRange, getTargetNodeTypeNameInContext } from '../editor-commands/transform-node-utils/utils'; export var canParentContainNodeType = function canParentContainNodeType(schema, selectedNodeTypeName, parentNode, nodeTypeName, nodeTypeAttrs) { var adjustedNodeTypeName = getTargetNodeTypeNameInContext(nodeTypeName, true, parentNode); if (!adjustedNodeTypeName) { return false; } var nodeType = schema.nodes[adjustedNodeTypeName]; var content = null; var nodesThatCantBeNestedInNestedExpand = ['blockCard', 'embedCard', 'table']; if (nodesThatCantBeNestedInNestedExpand.includes(selectedNodeTypeName) && (adjustedNodeTypeName === 'expand' || adjustedNodeTypeName === 'nestedExpand')) { var node = schema.nodes[selectedNodeTypeName]; content = node.createAndFill(); } return parentNode.type.validContent(Fragment.from(nodeType.createAndFill(nodeTypeAttrs, content))); }; var isHeadingToHeadingTransformEnabled = function isHeadingToHeadingTransformEnabled(selectedNode, targetNodeTypeAttrs) { var _selectedNode$attrs; var selectedLevel = (_selectedNode$attrs = selectedNode.attrs) === null || _selectedNode$attrs === void 0 ? void 0 : _selectedNode$attrs.level; var targetLevel = targetNodeTypeAttrs === null || targetNodeTypeAttrs === void 0 ? void 0 : targetNodeTypeAttrs.level; if (selectedLevel === undefined || targetLevel === undefined) { return false; } return selectedLevel !== targetLevel; }; var isTransformEnabledForNode = function isTransformEnabledForNode(node, targetNodeTypeName, targetNodeTypeAttrs, isNested, parent, schema) { var selectedNodeTypeName = toNodeTypeValue(node.type.name); if (!selectedNodeTypeName) { return false; } var isDisabledByStepsConfig = isTransformDisabledBasedOnStepsConfig(selectedNodeTypeName, targetNodeTypeName); if (isDisabledByStepsConfig) { return false; } if (selectedNodeTypeName === 'heading' && targetNodeTypeName === 'heading') { return isHeadingToHeadingTransformEnabled(node, targetNodeTypeAttrs); } if (isNested && !canParentContainNodeType(schema, selectedNodeTypeName, parent, targetNodeTypeName, targetNodeTypeAttrs)) { return false; } return true; }; export var isTransformToTargetDisabled = function isTransformToTargetDisabled(_ref) { var selection = _ref.selection, targetNodeTypeName = _ref.targetNodeTypeName, targetNodeTypeAttrs = _ref.targetNodeTypeAttrs; var _expandSelectionToBlo = expandSelectionToBlockRange(selection), range = _expandSelectionToBlo.range; if (!range) { return false; } var selectedNodes = getBlockNodesInRange(range); var parent = range.parent; var isNested = range.depth >= 1; var schema = selection.$from.doc.type.schema; var supportedTargetNodeTypeName = toNodeTypeValue(targetNodeTypeName); if (!supportedTargetNodeTypeName) { return true; } var isEnabledForAnyNode = selectedNodes.some(function (node) { return isTransformEnabledForNode(node, supportedTargetNodeTypeName, targetNodeTypeAttrs, isNested, parent, schema); }); return !isEnabledForAnyNode; };