@atlaskit/editor-plugin-block-menu 6.0.8 → 6.0.10

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (24) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/dist/cjs/editor-commands/transform-node-utils/TRANSFORMATION_MATRIX.js +224 -0
  3. package/dist/cjs/editor-commands/transform-node-utils/steps/applyTargetTextTypeStep.js +4 -0
  4. package/dist/cjs/editor-commands/transform-node-utils/steps/convertEachNodeStep.js +58 -1
  5. package/dist/cjs/editor-commands/transform-node-utils/steps/wrapMixedContentStep.js +12 -1
  6. package/dist/cjs/editor-commands/transform-node-utils/transform.js +4 -236
  7. package/dist/cjs/editor-commands/transform-node-utils/utils.js +33 -11
  8. package/dist/es2019/editor-commands/transform-node-utils/TRANSFORMATION_MATRIX.js +219 -0
  9. package/dist/es2019/editor-commands/transform-node-utils/steps/applyTargetTextTypeStep.js +4 -0
  10. package/dist/es2019/editor-commands/transform-node-utils/steps/convertEachNodeStep.js +56 -1
  11. package/dist/es2019/editor-commands/transform-node-utils/steps/wrapMixedContentStep.js +13 -2
  12. package/dist/es2019/editor-commands/transform-node-utils/transform.js +5 -238
  13. package/dist/es2019/editor-commands/transform-node-utils/utils.js +32 -10
  14. package/dist/esm/editor-commands/transform-node-utils/TRANSFORMATION_MATRIX.js +219 -0
  15. package/dist/esm/editor-commands/transform-node-utils/steps/applyTargetTextTypeStep.js +4 -0
  16. package/dist/esm/editor-commands/transform-node-utils/steps/convertEachNodeStep.js +58 -1
  17. package/dist/esm/editor-commands/transform-node-utils/steps/wrapMixedContentStep.js +13 -2
  18. package/dist/esm/editor-commands/transform-node-utils/transform.js +5 -238
  19. package/dist/esm/editor-commands/transform-node-utils/utils.js +32 -10
  20. package/dist/types/editor-commands/transform-node-utils/TRANSFORMATION_MATRIX.d.ts +2 -0
  21. package/dist/types/editor-commands/transform-node-utils/utils.d.ts +10 -5
  22. package/dist/types-ts4.5/editor-commands/transform-node-utils/TRANSFORMATION_MATRIX.d.ts +2 -0
  23. package/dist/types-ts4.5/editor-commands/transform-node-utils/utils.d.ts +10 -5
  24. package/package.json +4 -4
@@ -3,7 +3,7 @@
3
3
  Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
- exports.isTextNode = exports.getTargetNodeTypeNameInContext = exports.getSelectedNode = exports.getBlockNodesInRange = exports.createTextContent = exports.convertTextNodeToParagraph = exports.convertNestedExpandToExpand = exports.convertExpandToNestedExpand = void 0;
6
+ exports.splitTextNodeForCodeBlock = exports.isTextNode = exports.getTargetNodeTypeNameInContext = exports.getSelectedNode = exports.getBlockNodesInRange = exports.convertTextNodeToParagraph = exports.convertNestedExpandToExpand = exports.convertExpandToNestedExpand = void 0;
7
7
  var _state = require("@atlaskit/editor-prosemirror/state");
8
8
  var _utils = require("@atlaskit/editor-prosemirror/utils");
9
9
  var _editorTables = require("@atlaskit/editor-tables");
@@ -131,20 +131,42 @@ var getBlockNodesInRange = exports.getBlockNodesInRange = function getBlockNodes
131
131
  };
132
132
 
133
133
  /**
134
- * Iterates over a nodes children and extracting text content, removing all other inline content and converting
135
- * hardbreaks to newlines.
134
+ * Splits a text node (paragraph/heading) into parts for codeBlock conversion.
135
+ * Returns an array of:
136
+ * - strings (text content that can go into codeBlock)
137
+ * - PMNodes (incompatible inline nodes wrapped in paragraphs that need to break out)
136
138
  *
137
- * @param node - The node to create text content from (should be paragraph)
138
- * @returns The text content string.
139
+ * This preserves inline nodes (like status, inlineExtension) that cannot be represented as plain text.
140
+ *
141
+ * @param node - The text node (paragraph or heading) to split
142
+ * @param schema - The schema to use for creating paragraph nodes
143
+ * @returns Array of strings (for codeBlock) and PMNodes (to break out)
139
144
  */
140
- var createTextContent = exports.createTextContent = function createTextContent(node) {
141
- var textContent = node.children.map(function (child) {
145
+ var splitTextNodeForCodeBlock = exports.splitTextNodeForCodeBlock = function splitTextNodeForCodeBlock(node, schema) {
146
+ var result = [];
147
+ var currentText = '';
148
+ node.content.forEach(function (child) {
142
149
  if (child.isText) {
143
- return child.text;
150
+ currentText += child.text || '';
144
151
  } else if (child.type.name === 'hardBreak') {
145
- return '\n';
152
+ currentText += '\n';
153
+ } else {
154
+ // Incompatible inline node (status, inlineExtension, etc.)
155
+ // Flush accumulated text if any
156
+ if (currentText) {
157
+ result.push(currentText);
158
+ currentText = '';
159
+ }
160
+ // Wrap the inline node in a paragraph and add it to break out
161
+ var paragraph = schema.nodes.paragraph.create({}, child);
162
+ result.push(paragraph);
146
163
  }
147
- return '';
148
164
  });
149
- return textContent.join('');
165
+
166
+ // Don't forget remaining text (or empty string for empty nodes)
167
+ // Always push at least an empty string so empty paragraphs create empty codeBlocks
168
+ if (currentText || result.length === 0) {
169
+ result.push(currentText);
170
+ }
171
+ return result;
150
172
  };
@@ -0,0 +1,219 @@
1
+ import { flattenStep } from './flattenStep';
2
+ import { applyTargetTextTypeStep } from './steps/applyTargetTextTypeStep';
3
+ import { convertEachNodeStep } from './steps/convertEachNodeStep';
4
+ import { decisionListToListStep } from './steps/decisionListToListStep';
5
+ import { flattenListStep } from './steps/flattenListStep';
6
+ import { listToDecisionListStep } from './steps/listToDecisionListStep';
7
+ import { listToListStep } from './steps/listToListStep';
8
+ import { mergeNeighbourListsStep } from './steps/mergeNeighbourListsStep';
9
+ import { unwrapLayoutStep } from './steps/unwrapLayoutStep';
10
+ import { unwrapListStep } from './steps/unwrapListStep';
11
+ import { wrapBlockquoteToDecisionListStep } from './steps/wrapBlockquoteToDecisionListStep';
12
+ import { wrapMixedContentStep } from './steps/wrapMixedContentStep';
13
+ import { unwrapExpandStep } from './unwrapExpandStep';
14
+ import { unwrapStep } from './unwrapStep';
15
+ import { wrapIntoListStep } from './wrapIntoListStep';
16
+ import { wrapStep } from './wrapStep';
17
+
18
+ // Transform steps for all node type pairs.
19
+ // If a transformation is not defined (undefined), it is not available.
20
+ export const TRANSFORMATION_MATRIX = {
21
+ paragraph: {
22
+ heading: [flattenStep, applyTargetTextTypeStep],
23
+ blockquote: [wrapMixedContentStep],
24
+ codeBlock: [wrapMixedContentStep],
25
+ expand: [wrapMixedContentStep],
26
+ nestedExpand: [wrapMixedContentStep],
27
+ layoutSection: [wrapMixedContentStep],
28
+ panel: [wrapMixedContentStep],
29
+ bulletList: [wrapIntoListStep],
30
+ orderedList: [wrapIntoListStep],
31
+ taskList: [wrapIntoListStep],
32
+ decisionList: [wrapIntoListStep]
33
+ },
34
+ heading: {
35
+ heading: [flattenStep, applyTargetTextTypeStep],
36
+ paragraph: [flattenStep, applyTargetTextTypeStep],
37
+ blockquote: [wrapMixedContentStep],
38
+ codeBlock: [wrapMixedContentStep],
39
+ expand: [wrapMixedContentStep],
40
+ nestedExpand: [wrapMixedContentStep],
41
+ layoutSection: [wrapMixedContentStep],
42
+ panel: [wrapMixedContentStep],
43
+ bulletList: [wrapIntoListStep],
44
+ orderedList: [wrapIntoListStep],
45
+ taskList: [wrapIntoListStep],
46
+ decisionList: [wrapIntoListStep]
47
+ },
48
+ panel: {
49
+ blockquote: [unwrapStep, wrapMixedContentStep],
50
+ codeBlock: [unwrapStep, wrapMixedContentStep],
51
+ expand: [unwrapStep, wrapStep],
52
+ nestedExpand: [unwrapStep, wrapStep],
53
+ layoutSection: [unwrapStep, wrapMixedContentStep],
54
+ paragraph: [unwrapStep]
55
+ },
56
+ expand: {
57
+ panel: [unwrapExpandStep, wrapMixedContentStep],
58
+ blockquote: [unwrapExpandStep, wrapMixedContentStep],
59
+ layoutSection: [unwrapExpandStep, wrapMixedContentStep],
60
+ nestedExpand: [unwrapExpandStep, wrapStep],
61
+ paragraph: [unwrapExpandStep]
62
+ },
63
+ nestedExpand: {
64
+ panel: [unwrapExpandStep, wrapMixedContentStep],
65
+ blockquote: [unwrapExpandStep, wrapMixedContentStep],
66
+ layoutSection: [unwrapExpandStep, wrapMixedContentStep],
67
+ paragraph: [unwrapExpandStep]
68
+ },
69
+ blockquote: {
70
+ expand: [wrapStep],
71
+ nestedExpand: [wrapStep],
72
+ layoutSection: [wrapMixedContentStep],
73
+ panel: [unwrapStep, wrapStep],
74
+ paragraph: [unwrapStep],
75
+ heading: [unwrapStep, applyTargetTextTypeStep],
76
+ decisionList: [unwrapStep, wrapBlockquoteToDecisionListStep]
77
+ },
78
+ layoutSection: {
79
+ blockquote: [unwrapLayoutStep, wrapMixedContentStep],
80
+ expand: [unwrapLayoutStep, wrapStep],
81
+ nestedExpand: [unwrapLayoutStep, wrapStep],
82
+ panel: [unwrapLayoutStep, wrapMixedContentStep],
83
+ paragraph: [unwrapLayoutStep]
84
+ },
85
+ codeBlock: {
86
+ blockquote: [wrapStep],
87
+ expand: [wrapStep],
88
+ nestedExpand: [wrapStep],
89
+ layoutSection: [wrapMixedContentStep],
90
+ panel: [wrapStep],
91
+ paragraph: [applyTargetTextTypeStep]
92
+ },
93
+ bulletList: {
94
+ orderedList: [listToListStep],
95
+ taskList: [listToListStep],
96
+ decisionList: [flattenListStep, listToDecisionListStep],
97
+ blockquote: [wrapStep],
98
+ expand: [wrapStep],
99
+ nestedExpand: [wrapStep],
100
+ layoutSection: [wrapMixedContentStep],
101
+ panel: [wrapStep],
102
+ paragraph: [flattenListStep, unwrapListStep, applyTargetTextTypeStep]
103
+ },
104
+ orderedList: {
105
+ bulletList: [listToListStep],
106
+ taskList: [listToListStep],
107
+ decisionList: [flattenListStep, listToDecisionListStep],
108
+ blockquote: [wrapStep],
109
+ expand: [wrapStep],
110
+ nestedExpand: [wrapStep],
111
+ layoutSection: [wrapMixedContentStep],
112
+ panel: [wrapStep],
113
+ paragraph: [flattenListStep, unwrapListStep, applyTargetTextTypeStep]
114
+ },
115
+ taskList: {
116
+ bulletList: [listToListStep],
117
+ orderedList: [listToListStep],
118
+ decisionList: [flattenListStep, listToDecisionListStep],
119
+ expand: [wrapStep],
120
+ nestedExpand: [wrapStep],
121
+ layoutSection: [wrapMixedContentStep],
122
+ panel: [wrapStep],
123
+ paragraph: [flattenListStep, unwrapListStep, applyTargetTextTypeStep]
124
+ },
125
+ table: {
126
+ expand: [wrapStep],
127
+ nestedExpand: [wrapStep],
128
+ layoutSection: [wrapMixedContentStep]
129
+ },
130
+ mediaSingle: {
131
+ blockquote: [wrapStep],
132
+ expand: [wrapStep],
133
+ nestedExpand: [wrapStep],
134
+ layoutSection: [wrapMixedContentStep],
135
+ panel: [wrapStep],
136
+ bulletList: [wrapIntoListStep],
137
+ orderedList: [wrapIntoListStep]
138
+ },
139
+ mediaGroup: {
140
+ blockquote: [wrapStep],
141
+ expand: [wrapStep],
142
+ nestedExpand: [wrapStep],
143
+ layoutSection: [wrapMixedContentStep],
144
+ panel: [wrapStep]
145
+ },
146
+ media: {
147
+ blockquote: [wrapStep],
148
+ codeBlock: [wrapStep],
149
+ expand: [wrapStep],
150
+ nestedExpand: [wrapStep],
151
+ layoutSection: [wrapStep],
152
+ panel: [wrapStep],
153
+ bulletList: [wrapIntoListStep],
154
+ orderedList: [wrapIntoListStep],
155
+ taskList: [wrapIntoListStep],
156
+ decisionList: [wrapIntoListStep]
157
+ },
158
+ decisionList: {
159
+ bulletList: [decisionListToListStep],
160
+ orderedList: [decisionListToListStep],
161
+ taskList: [decisionListToListStep],
162
+ blockquote: [unwrapListStep, wrapStep],
163
+ codeBlock: [unwrapListStep, wrapMixedContentStep],
164
+ expand: [wrapStep],
165
+ nestedExpand: [wrapStep],
166
+ layoutSection: [wrapMixedContentStep],
167
+ panel: [wrapStep],
168
+ paragraph: [flattenListStep, unwrapListStep, applyTargetTextTypeStep],
169
+ heading: [flattenListStep, unwrapListStep, applyTargetTextTypeStep]
170
+ },
171
+ blockCard: {
172
+ expand: [wrapStep],
173
+ nestedExpand: [wrapStep],
174
+ layoutSection: [wrapMixedContentStep],
175
+ panel: [wrapStep]
176
+ },
177
+ embedCard: {
178
+ expand: [wrapStep],
179
+ nestedExpand: [wrapStep],
180
+ layoutSection: [wrapMixedContentStep]
181
+ },
182
+ extension: {
183
+ blockquote: [wrapStep],
184
+ expand: [wrapStep],
185
+ nestedExpand: [wrapStep],
186
+ layoutSection: [wrapMixedContentStep],
187
+ panel: [wrapStep]
188
+ },
189
+ bodiedExtension: {
190
+ nestedExpand: [wrapStep],
191
+ layoutSection: [wrapMixedContentStep]
192
+ },
193
+ multiBodiedExtension: {
194
+ blockquote: [wrapStep],
195
+ codeBlock: [wrapStep],
196
+ expand: [wrapStep],
197
+ nestedExpand: [wrapStep],
198
+ layoutSection: [wrapStep],
199
+ panel: [wrapStep],
200
+ bulletList: [wrapIntoListStep],
201
+ orderedList: [wrapIntoListStep],
202
+ taskList: [wrapIntoListStep],
203
+ decisionList: [wrapIntoListStep]
204
+ },
205
+ multi: {
206
+ blockquote: [wrapMixedContentStep],
207
+ codeBlock: [wrapMixedContentStep],
208
+ expand: [wrapMixedContentStep],
209
+ nestedExpand: [wrapMixedContentStep],
210
+ layoutSection: [wrapMixedContentStep],
211
+ panel: [wrapMixedContentStep],
212
+ bulletList: [convertEachNodeStep, mergeNeighbourListsStep],
213
+ orderedList: [convertEachNodeStep, mergeNeighbourListsStep],
214
+ taskList: [convertEachNodeStep, mergeNeighbourListsStep],
215
+ decisionList: [convertEachNodeStep, mergeNeighbourListsStep],
216
+ paragraph: [convertEachNodeStep],
217
+ heading: [applyTargetTextTypeStep]
218
+ }
219
+ };
@@ -33,6 +33,10 @@ export const applyTargetTextTypeStep = (nodes, context) => {
33
33
  return nodes;
34
34
  }
35
35
  return nodes.map(node => {
36
+ // If codeblock, return nodes as is
37
+ if (targetNodeTypeName === 'heading' && node.type.name === 'codeBlock') {
38
+ return node;
39
+ }
36
40
  if (node.isTextblock) {
37
41
  // Convert textblock nodes to the target type with content preserved
38
42
  let attrs = {};
@@ -1,4 +1,44 @@
1
1
  import { convertNodesToTargetType } from '../transform';
2
+ /**
3
+ * Handles the edge case where transforming multi-selection to decisionList results in
4
+ * all content breaking out (no valid children for the target). In this case, creates an empty
5
+ * decisionList to ensure the target type exists.
6
+ *
7
+ * Similar to handleEmptyContainerEdgeCase in wrapMixedContentStep, but specifically for
8
+ * multi-to-decisionList transformations where blockquotes break out.
9
+ *
10
+ * @param result - The current result nodes after processing
11
+ * @param hasCreatedDecisionList - Whether a decisionList was already created during processing
12
+ * @param targetNodeTypeName - The target node type name
13
+ * @param schema - The schema
14
+ * @returns The result nodes with an empty decisionList prepended if needed, or the original result
15
+ */
16
+ const handleEmptyDecisionListEdgeCase = (result, hasCreatedDecisionList, targetNodeTypeName, schema) => {
17
+ // Only apply this edge case for decisionList target
18
+ if (targetNodeTypeName !== 'decisionList') {
19
+ return result;
20
+ }
21
+
22
+ // If no decisionList was created but we have nodes in result, all content broke out
23
+ const allContentBrokeOut = !hasCreatedDecisionList && result.length > 0;
24
+ if (!allContentBrokeOut) {
25
+ return result;
26
+ }
27
+
28
+ // Create an empty decisionList
29
+ const decisionListType = schema.nodes.decisionList;
30
+ const decisionItemType = schema.nodes.decisionItem;
31
+ if (decisionListType && decisionItemType) {
32
+ const emptyDecisionItem = decisionItemType.createAndFill();
33
+ if (emptyDecisionItem) {
34
+ const emptyDecisionList = decisionListType.createAndFill({}, [emptyDecisionItem]);
35
+ if (emptyDecisionList) {
36
+ return [emptyDecisionList, ...result];
37
+ }
38
+ }
39
+ }
40
+ return result;
41
+ };
2
42
  export const convertEachNodeStep = (nodes, context) => {
3
43
  const {
4
44
  schema,
@@ -9,8 +49,15 @@ export const convertEachNodeStep = (nodes, context) => {
9
49
  if (!targetNodeType) {
10
50
  return nodes;
11
51
  }
52
+ const blockquoteType = schema.nodes.blockquote;
12
53
  const resultNodes = [];
54
+ let hasCreatedDecisionList = false;
13
55
  for (const node of nodes) {
56
+ // Edge case: blockquotes should break out when transforming to decisionList
57
+ if (targetNodeTypeName === 'decisionList' && blockquoteType && node.type === blockquoteType) {
58
+ resultNodes.push(node);
59
+ continue;
60
+ }
14
61
  const transformedNodes = convertNodesToTargetType({
15
62
  sourceNodes: [node],
16
63
  targetNodeType,
@@ -20,9 +67,17 @@ export const convertEachNodeStep = (nodes, context) => {
20
67
  });
21
68
  if (transformedNodes.length > 0) {
22
69
  resultNodes.push(...transformedNodes);
70
+ // Track if we created a decisionList
71
+
72
+ if (targetNodeTypeName === 'decisionList' && transformedNodes.some(n => n.type === targetNodeType)) {
73
+ hasCreatedDecisionList = true;
74
+ }
23
75
  } else {
24
76
  resultNodes.push(node);
25
77
  }
26
78
  }
27
- return resultNodes;
79
+
80
+ // Handle edge case: if no decisionList was created, create an empty one
81
+ const finalResult = handleEmptyDecisionListEdgeCase(resultNodes, hasCreatedDecisionList, targetNodeTypeName, schema);
82
+ return finalResult;
28
83
  };
@@ -1,7 +1,7 @@
1
1
  import { Fragment } from '@atlaskit/editor-prosemirror/model';
2
2
  import { removeDisallowedMarks } from '../marks';
3
3
  import { NODE_CATEGORY_BY_TYPE } from '../types';
4
- import { convertTextNodeToParagraph, createTextContent, isTextNode } from '../utils';
4
+ import { convertTextNodeToParagraph, isTextNode, splitTextNodeForCodeBlock } from '../utils';
5
5
 
6
6
  /**
7
7
  * Creates a layout section with two columns, where the first column contains the provided content.
@@ -150,7 +150,18 @@ export const wrapMixedContentStep = (nodes, context) => {
150
150
  currentContainerContent.push(...removeDisallowedMarks([node], validationType));
151
151
  };
152
152
  const handleCodeblockTextNode = node => {
153
- currentContainerContent.push(createTextContent(node));
153
+ // Split the text node into text parts and incompatible inline nodes
154
+ const parts = splitTextNodeForCodeBlock(node, schema);
155
+ parts.forEach(part => {
156
+ if (typeof part === 'string') {
157
+ // Text content - add to current codeBlock
158
+ currentContainerContent.push(part);
159
+ } else {
160
+ // Incompatible inline node wrapped in paragraph - break it out
161
+ flushCurrentContainer();
162
+ result.push(part);
163
+ }
164
+ });
154
165
  };
155
166
  const handleConvertibleTextNode = node => {
156
167
  const paragraph = convertTextNodeToParagraph(node, schema);
@@ -1,236 +1,6 @@
1
1
  import { getTargetNodeTypeNameInContext } from '../transform-node-utils/utils';
2
- import { flattenStep } from './flattenStep';
3
- import { applyTargetTextTypeStep } from './steps/applyTargetTextTypeStep';
4
- import { convertEachNodeStep } from './steps/convertEachNodeStep';
5
- import { decisionListToListStep } from './steps/decisionListToListStep';
6
- import { flattenListStep } from './steps/flattenListStep';
7
- import { listToDecisionListStep } from './steps/listToDecisionListStep';
8
- import { listToListStep } from './steps/listToListStep';
9
- import { mergeNeighbourListsStep } from './steps/mergeNeighbourListsStep';
10
- import { unwrapLayoutStep } from './steps/unwrapLayoutStep';
11
- import { unwrapListStep } from './steps/unwrapListStep';
12
- import { wrapBlockquoteToDecisionListStep } from './steps/wrapBlockquoteToDecisionListStep';
13
- import { wrapMixedContentStep } from './steps/wrapMixedContentStep';
14
- import { getNodeName, NODE_CATEGORY_BY_TYPE, toNodeTypeValue } from './types';
15
- import { unwrapExpandStep } from './unwrapExpandStep';
16
- import { unwrapStep } from './unwrapStep';
17
- import { wrapIntoListStep } from './wrapIntoListStep';
18
- import { wrapStep } from './wrapStep';
19
-
20
- // Transform steps for combinations of node categories (block/container/list/text)
21
- const TRANSFORM_STEPS = {
22
- atomic: {
23
- atomic: undefined,
24
- container: [wrapStep],
25
- list: [wrapIntoListStep],
26
- text: undefined,
27
- multi: undefined
28
- },
29
- container: {
30
- atomic: undefined,
31
- container: [unwrapStep, wrapStep],
32
- list: undefined,
33
- text: [unwrapStep],
34
- multi: undefined
35
- },
36
- list: {
37
- atomic: undefined,
38
- container: [wrapStep],
39
- list: [listToListStep],
40
- text: [flattenListStep, unwrapListStep, applyTargetTextTypeStep],
41
- multi: undefined
42
- },
43
- text: {
44
- atomic: undefined,
45
- container: [wrapMixedContentStep],
46
- list: [wrapIntoListStep],
47
- text: [flattenStep, applyTargetTextTypeStep],
48
- multi: undefined
49
- },
50
- multi: {
51
- atomic: undefined,
52
- container: [wrapMixedContentStep],
53
- list: [convertEachNodeStep, mergeNeighbourListsStep],
54
- text: [convertEachNodeStep],
55
- multi: undefined
56
- }
57
- };
58
-
59
- // Transform steps for specific pairs of node types that cannot be processed
60
- // using generic rules/steps from TRANSFORM_STEPS.
61
- // Use 'null' to indicate unavailable transfrorm for a case where TRANSFORM_STEPS are not undefined.
62
- const TRANSFORM_STEPS_OVERRIDE = {
63
- paragraph: {
64
- paragraph: null
65
- },
66
- heading: {},
67
- panel: {
68
- panel: null,
69
- layoutSection: [unwrapStep, wrapMixedContentStep],
70
- codeBlock: [unwrapStep, wrapMixedContentStep],
71
- blockquote: [unwrapStep, wrapMixedContentStep],
72
- taskList: null,
73
- bulletList: null,
74
- orderedList: null,
75
- heading: null
76
- },
77
- expand: {
78
- expand: null,
79
- panel: [unwrapExpandStep, wrapMixedContentStep],
80
- blockquote: [unwrapExpandStep, wrapMixedContentStep],
81
- layoutSection: [unwrapExpandStep, wrapMixedContentStep],
82
- paragraph: [unwrapExpandStep],
83
- codeBlock: null,
84
- heading: null
85
- },
86
- nestedExpand: {
87
- expand: null,
88
- nestedExpand: null,
89
- panel: [unwrapExpandStep, wrapMixedContentStep],
90
- blockquote: [unwrapExpandStep, wrapMixedContentStep],
91
- paragraph: [unwrapExpandStep],
92
- codeBlock: null,
93
- heading: null
94
- },
95
- blockquote: {
96
- blockquote: null,
97
- expand: [wrapStep],
98
- nestedExpand: [wrapStep],
99
- layoutSection: [wrapMixedContentStep],
100
- codeBlock: null,
101
- decisionList: [unwrapStep, wrapBlockquoteToDecisionListStep],
102
- paragraph: [unwrapStep],
103
- heading: [unwrapStep, applyTargetTextTypeStep]
104
- },
105
- layoutSection: {
106
- layoutSection: null,
107
- blockquote: [unwrapLayoutStep, wrapMixedContentStep],
108
- expand: [unwrapLayoutStep, wrapStep],
109
- panel: [unwrapLayoutStep, wrapMixedContentStep],
110
- codeBlock: null,
111
- paragraph: [unwrapLayoutStep],
112
- heading: null
113
- },
114
- codeBlock: {
115
- codeBlock: null,
116
- blockquote: [wrapStep],
117
- expand: [wrapStep],
118
- nestedExpand: [wrapStep],
119
- layoutSection: [wrapMixedContentStep],
120
- panel: [wrapStep],
121
- paragraph: [applyTargetTextTypeStep],
122
- heading: null
123
- },
124
- bulletList: {
125
- bulletList: null,
126
- codeBlock: null,
127
- layoutSection: [wrapMixedContentStep],
128
- decisionList: [flattenListStep, listToDecisionListStep],
129
- heading: null
130
- },
131
- orderedList: {
132
- orderedList: null,
133
- codeBlock: null,
134
- layoutSection: [wrapMixedContentStep],
135
- decisionList: [flattenListStep, listToDecisionListStep],
136
- heading: null
137
- },
138
- taskList: {
139
- blockquote: null,
140
- codeBlock: null,
141
- layoutSection: [wrapMixedContentStep],
142
- decisionList: [flattenListStep, listToDecisionListStep],
143
- heading: null,
144
- taskList: null
145
- },
146
- table: {
147
- layoutSection: [wrapMixedContentStep],
148
- blockquote: null,
149
- panel: null,
150
- codeBlock: null,
151
- orderedList: null,
152
- bulletList: null,
153
- taskList: null,
154
- decisionList: null
155
- },
156
- mediaSingle: {
157
- layoutSection: [wrapMixedContentStep],
158
- codeBlock: null,
159
- decisionList: null,
160
- taskList: null
161
- },
162
- mediaGroup: {
163
- layoutSection: [wrapMixedContentStep],
164
- codeBlock: null,
165
- decisionList: null,
166
- bulletList: null,
167
- orderedList: null,
168
- taskList: null
169
- },
170
- decisionList: {
171
- decisionList: null,
172
- bulletList: [decisionListToListStep],
173
- orderedList: [decisionListToListStep],
174
- taskList: [decisionListToListStep],
175
- layoutSection: [wrapMixedContentStep]
176
- },
177
- blockCard: {
178
- layoutSection: [wrapMixedContentStep],
179
- blockquote: null,
180
- codeBlock: null,
181
- orderedList: null,
182
- bulletList: null,
183
- taskList: null,
184
- decisionList: null
185
- },
186
- embedCard: {
187
- layoutSection: [wrapMixedContentStep],
188
- blockquote: null,
189
- panel: null,
190
- codeBlock: null,
191
- orderedList: null,
192
- bulletList: null,
193
- taskList: null,
194
- decisionList: null
195
- },
196
- extension: {
197
- layoutSection: [wrapMixedContentStep],
198
- codeBlock: null,
199
- decisionList: null,
200
- taskList: null,
201
- orderedList: null,
202
- bulletList: null
203
- },
204
- bodiedExtension: {
205
- layoutSection: [wrapMixedContentStep],
206
- blockquote: null,
207
- expand: null,
208
- panel: null,
209
- codeBlock: null,
210
- orderedList: null,
211
- bulletList: null,
212
- taskList: null,
213
- decisionList: null
214
- },
215
- multi: {
216
- heading: [applyTargetTextTypeStep]
217
- // Similar to heading, all structures are kept as is
218
- // EG: transformed: other lists, paragarph, headings
219
- // eg: not-transformed: quotes, codeblocks ... all typeof 'containers'
220
- // decisionList: [],
221
- }
222
- };
223
- const getTransformStepsForNodeTypes = (selectedNodeTypeName, targetNodeTypeName) => {
224
- var _TRANSFORM_STEPS_OVER;
225
- const fromCategory = NODE_CATEGORY_BY_TYPE[selectedNodeTypeName];
226
- const toCategory = NODE_CATEGORY_BY_TYPE[targetNodeTypeName];
227
- const overrideSteps = (_TRANSFORM_STEPS_OVER = TRANSFORM_STEPS_OVERRIDE[selectedNodeTypeName]) === null || _TRANSFORM_STEPS_OVER === void 0 ? void 0 : _TRANSFORM_STEPS_OVER[targetNodeTypeName];
228
- if (overrideSteps === null) {
229
- return null;
230
- }
231
- const steps = overrideSteps !== null && overrideSteps !== void 0 ? overrideSteps : TRANSFORM_STEPS[fromCategory][toCategory];
232
- return steps;
233
- };
2
+ import { TRANSFORMATION_MATRIX } from './TRANSFORMATION_MATRIX';
3
+ import { getNodeName, toNodeTypeValue } from './types';
234
4
  /**
235
5
  * Convert a list of nodes to a target node type.
236
6
  * If no steps are found, the source nodes are returned unchanged.
@@ -264,7 +34,7 @@ export const convertNodesToTargetType = ({
264
34
  if (!selectedNodeTypeName || !targetNodeTypeName) {
265
35
  return sourceNodes;
266
36
  }
267
- const steps = getTransformStepsForNodeTypes(selectedNodeTypeName, targetNodeTypeName);
37
+ const steps = TRANSFORMATION_MATRIX[selectedNodeTypeName][targetNodeTypeName];
268
38
  const context = {
269
39
  // sourceNode is incorrect now - what to do here?
270
40
  fromNode: sourceNode,
@@ -280,9 +50,6 @@ export const convertNodesToTargetType = ({
280
50
  }, sourceNodes);
281
51
  };
282
52
  export const isTransformDisabledBasedOnStepsConfig = (selectedNodeType, targetNodeType) => {
283
- const steps = getTransformStepsForNodeTypes(selectedNodeType, targetNodeType);
284
- if (!steps || steps.length === 0) {
285
- return true;
286
- }
287
- return false;
53
+ const steps = TRANSFORMATION_MATRIX[selectedNodeType][targetNodeType];
54
+ return !steps || steps.length === 0;
288
55
  };