@atlaskit/editor-plugin-block-menu
Version:
BlockMenu plugin for @atlaskit/editor-core
73 lines (72 loc) • 3.64 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.isTransformToTargetDisabled = exports.canParentContainNodeType = void 0;
var _selection = require("@atlaskit/editor-common/selection");
var _model = require("@atlaskit/editor-prosemirror/model");
var _transform = require("../editor-commands/transform-node-utils/transform");
var _types = require("../editor-commands/transform-node-utils/types");
var _utils = require("../editor-commands/transform-node-utils/utils");
var canParentContainNodeType = exports.canParentContainNodeType = function canParentContainNodeType(schema, selectedNodeTypeName, parentNode, nodeTypeName, nodeTypeAttrs) {
var adjustedNodeTypeName = (0, _utils.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(_model.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 = (0, _types.toNodeTypeValue)(node.type.name);
if (!selectedNodeTypeName) {
return false;
}
var isDisabledByStepsConfig = (0, _transform.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;
};
var isTransformToTargetDisabled = exports.isTransformToTargetDisabled = function isTransformToTargetDisabled(_ref) {
var selection = _ref.selection,
targetNodeTypeName = _ref.targetNodeTypeName,
targetNodeTypeAttrs = _ref.targetNodeTypeAttrs;
var _expandSelectionToBlo = (0, _selection.expandSelectionToBlockRange)(selection),
range = _expandSelectionToBlo.range;
if (!range) {
return false;
}
var selectedNodes = (0, _utils.getBlockNodesInRange)(range);
var parent = range.parent;
var isNested = range.depth >= 1;
var schema = selection.$from.doc.type.schema;
var supportedTargetNodeTypeName = (0, _types.toNodeTypeValue)(targetNodeTypeName);
if (!supportedTargetNodeTypeName) {
return true;
}
var isEnabledForAnyNode = selectedNodes.some(function (node) {
return isTransformEnabledForNode(node, supportedTargetNodeTypeName, targetNodeTypeAttrs, isNested, parent, schema);
});
return !isEnabledForAnyNode;
};