From fd5c81d8f55e4912b602abce4dddcd3f1ee288b5 Mon Sep 17 00:00:00 2001 From: VladaHarbour Date: Mon, 24 Mar 2025 18:40:46 +0200 Subject: [PATCH] HAR-9211 Comments export fixes --- .../src/core/super-converter/SuperConverter.js | 10 ++++++---- .../src/core/super-converter/exporter.js | 11 +++++++---- .../v2/exporter/commentsExporter.js | 18 ++++++++++-------- packages/superdoc/src/core/SuperDoc.js | 2 +- 4 files changed, 24 insertions(+), 17 deletions(-) diff --git a/packages/super-editor/src/core/super-converter/SuperConverter.js b/packages/super-editor/src/core/super-converter/SuperConverter.js index c896275e68..38678ef7f7 100644 --- a/packages/super-editor/src/core/super-converter/SuperConverter.js +++ b/packages/super-editor/src/core/super-converter/SuperConverter.js @@ -358,7 +358,7 @@ class SuperConverter { }); updatedXml = { ...documentXml }; commentsRels = relationships; - }; + } this.convertedXml = { ...this.convertedXml, ...updatedXml }; @@ -390,8 +390,10 @@ class SuperConverter { const relsData = this.convertedXml['word/_rels/document.xml.rels']; const relationships = relsData.elements.find((x) => x.name === 'Relationships'); const newRels = []; - - let largestId = Math.max(...relationships.elements.map((el) => Number(el.attributes.Id.replace('rId', '')))); + + const regex = /rId|mi/g; + let largestId = Math.max(...relationships.elements.map((el) => Number(el.attributes.Id.replace(regex, '')))); + rels.forEach((rel) => { const existingId = rel.attributes.Id; const existingTarget = relationships.elements.find((el) => el.attributes.Target === rel.attributes.Target); @@ -400,7 +402,7 @@ class SuperConverter { if (existingTarget && !isNewMedia) { return; } - + // Update the target to escape ampersands rel.attributes.Target = rel.attributes?.Target?.replace(/&/g, '&'); diff --git a/packages/super-editor/src/core/super-converter/exporter.js b/packages/super-editor/src/core/super-converter/exporter.js index 1a3da08ec8..6c8d772dc5 100644 --- a/packages/super-editor/src/core/super-converter/exporter.js +++ b/packages/super-editor/src/core/super-converter/exporter.js @@ -1604,11 +1604,14 @@ function translateFieldAnnotation(params) { export function translateHardBreak() { return { - name: 'w:br', - type: 'element', - attributes: { 'w:type': 'page' } + name: 'w:r', + elements: [{ + name: 'w:br', + type: 'element', + attributes: { 'w:type': 'page' } + }] }; -}; +} export class DocxExporter { constructor(converter) { diff --git a/packages/super-editor/src/core/super-converter/v2/exporter/commentsExporter.js b/packages/super-editor/src/core/super-converter/v2/exporter/commentsExporter.js index 9547b92af2..ef139414bb 100644 --- a/packages/super-editor/src/core/super-converter/v2/exporter/commentsExporter.js +++ b/packages/super-editor/src/core/super-converter/v2/exporter/commentsExporter.js @@ -38,11 +38,14 @@ export function translateCommentNode(params, type) { let commentSchema = getCommentSchema(type, commentIndex); if (type === 'End') { - const commentReference = { name: 'w:commentReference', attributes: { 'w:id': String(commentIndex) } }; + const commentReference = { + name: 'w:r', + elements: [{ name: 'w:commentReference', attributes: { 'w:id': String(commentIndex) } }] + }; commentSchema = [commentSchema, commentReference]; - }; + } return commentSchema; -}; +} /** @@ -185,7 +188,6 @@ export const updateCommentsExtendedXml = (comments = [], commentsExtendedXml) => const attributes = { 'w15:paraId': comment.commentParaId, 'w15:done': comment.resolvedTime ? '1' : '0', - 'w:rsid': comment.commentId || comment.importedId, }; const parentId = comment.parentCommentId; @@ -193,7 +195,7 @@ export const updateCommentsExtendedXml = (comments = [], commentsExtendedXml) => const parentComment = comments.find((c) => c.commentId === parentId); const parentParaId = parentComment.commentParaId; attributes['w15:paraIdParent'] = parentParaId; - }; + } return { type: 'element', @@ -240,7 +242,7 @@ export const updateCommentsIdsAndExtensible = (comments = [], commentsIds, exten "name": "w16cex:commentExtensible", "attributes": { "w16cex:durableId": newDurableId, - "w16cex:dateUtc": "2025-03-06T23:32:00Z" + "w16cex:dateUtc": toIsoNoFractional() } }; extensibleUpdated.elements[0].elements.push(newExtensible); @@ -353,8 +355,8 @@ export const prepareCommentsXmlFilesForExport = ({ if (exportType === 'clean') { const documentXml = removeCommentsFilesFromConvertedXml(convertedXml); return { documentXml, relationships }; - }; - + } + // Initialize comments files with empty content const updatedXml = generateConvertedXmlWithCommentFiles(convertedXml); diff --git a/packages/superdoc/src/core/SuperDoc.js b/packages/superdoc/src/core/SuperDoc.js index c7d2b564a0..58cb78c789 100644 --- a/packages/superdoc/src/core/SuperDoc.js +++ b/packages/superdoc/src/core/SuperDoc.js @@ -505,7 +505,7 @@ export class SuperDoc extends EventEmitter { const comments = []; if (commentsType !== 'clean') { comments.push(...this.commentsStore?.translateCommentsForExport()); - }; + } const docxPromises = []; this.superdocStore.documents.forEach((doc) => {