From baf8007f66a8a2f08c4d2dbc1f6db24d8542ad52 Mon Sep 17 00:00:00 2001 From: Artem Nistuley Date: Wed, 26 Mar 2025 19:32:44 +0200 Subject: [PATCH] handle import issues --- .../super-editor/src/core/helpers/createDocument.js | 12 ++++++++++-- .../src/core/super-converter/SuperConverter.js | 2 +- .../v2/importer/annotationImporter.js | 4 ++++ .../core/super-converter/v2/importer/listImporter.js | 2 +- .../v2/importer/standardNodeImporter.js | 4 ++++ 5 files changed, 20 insertions(+), 4 deletions(-) diff --git a/packages/super-editor/src/core/helpers/createDocument.js b/packages/super-editor/src/core/helpers/createDocument.js index 177022cc86..3a855f8036 100644 --- a/packages/super-editor/src/core/helpers/createDocument.js +++ b/packages/super-editor/src/core/helpers/createDocument.js @@ -5,11 +5,19 @@ * @param editor Editor * @returns Document. */ -export function createDocument(converter, schema, editor) { + +export function createDocument(converter, schema, editor, { check = false } = {}) { const documentData = converter.getSchema(editor); if (documentData) { - return schema.nodeFromJSON(documentData); + const documentNode = schema.nodeFromJSON(documentData); + + // for testing + if (check) { + documentNode.check(); + } + + return documentNode; } return schema.topNodeType.createAndFill(); diff --git a/packages/super-editor/src/core/super-converter/SuperConverter.js b/packages/super-editor/src/core/super-converter/SuperConverter.js index 38678ef7f7..47e9347b6a 100644 --- a/packages/super-editor/src/core/super-converter/SuperConverter.js +++ b/packages/super-editor/src/core/super-converter/SuperConverter.js @@ -53,7 +53,7 @@ class SuperConverter { { name: 'w:spacing', type: 'lineHeight', mark: 'textStyle', property: 'lineHeight' }, { name: 'link', type: 'link', mark: 'link', property: 'href' }, { name: 'w:highlight', type: 'highlight', mark: 'highlight', property: 'color' }, - { name: 'w:shd', type: 'highlight', mark: 'highlight', property: 'color'} + // { name: 'w:shd', type: 'highlight', mark: 'highlight', property: 'color'} ]; static propertyTypes = Object.freeze({ diff --git a/packages/super-editor/src/core/super-converter/v2/importer/annotationImporter.js b/packages/super-editor/src/core/super-converter/v2/importer/annotationImporter.js index 1f220d1be8..d097292057 100644 --- a/packages/super-editor/src/core/super-converter/v2/importer/annotationImporter.js +++ b/packages/super-editor/src/core/super-converter/v2/importer/annotationImporter.js @@ -35,6 +35,10 @@ export const handleAnnotationNode = (params) => { fieldColor, multipleImage: isMultipleImage === 'true', }; + + if (!attrs.fieldId || !attrs.displayLabel) { + return { nodes: [], consumed: 0 }; + } let result = { type: 'text', diff --git a/packages/super-editor/src/core/super-converter/v2/importer/listImporter.js b/packages/super-editor/src/core/super-converter/v2/importer/listImporter.js index e8ebfcc0a2..0cc5e30679 100644 --- a/packages/super-editor/src/core/super-converter/v2/importer/listImporter.js +++ b/packages/super-editor/src/core/super-converter/v2/importer/listImporter.js @@ -110,7 +110,7 @@ function handleListNodes( // Spacers in the XML and need to be appended to the last item. if (item.elements && !hasTextNode(item.elements)) { const n = handleStandardNode({ ...params, nodes: [item] }).nodes[0]; - parsedListItems[parsedListItems.length - 1]?.content.push(n); + if (n) parsedListItems[parsedListItems.length - 1]?.content.push(n); item.seen = true; continue; } diff --git a/packages/super-editor/src/core/super-converter/v2/importer/standardNodeImporter.js b/packages/super-editor/src/core/super-converter/v2/importer/standardNodeImporter.js index 56b5a182ce..68ca8c1112 100644 --- a/packages/super-editor/src/core/super-converter/v2/importer/standardNodeImporter.js +++ b/packages/super-editor/src/core/super-converter/v2/importer/standardNodeImporter.js @@ -13,6 +13,10 @@ export const handleStandardNode = (params) => { const node = nodes[0]; const { name } = node; const { attributes, elements, marks = [] } = parseProperties(node, docx); + + if (name === 'w:sdt') { + return { nodes: [], consumed: 0 }; + } // Formatting only nodes if (isPropertiesElement(node)) {