@atlaskit/editor-plugin-block-menu
Version:
BlockMenu plugin for @atlaskit/editor-core
67 lines • 3.44 kB
JavaScript
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;
};