diff --git a/packages/super-editor/src/core/helpers/list-numbering-helpers.js b/packages/super-editor/src/core/helpers/list-numbering-helpers.js index d88986b4b..e18671e87 100644 --- a/packages/super-editor/src/core/helpers/list-numbering-helpers.js +++ b/packages/super-editor/src/core/helpers/list-numbering-helpers.js @@ -3,6 +3,8 @@ import { getStyleTagFromStyleId } from '@core/super-converter/v2/importer/listIm import { baseBulletList, baseOrderedListDef } from './baseListDefinitions'; import { updateNumberingProperties } from '@core/commands/changeListLevel'; import { findParentNode } from './findParentNode.js'; +import { translator as wAbstractNumTranslator } from '@converter/v3/handlers/w/abstractNum'; +import { translator as wNumTranslator } from '@converter/v3/handlers/w/num'; /** * Generate a new list definition for the given list type. @@ -114,6 +116,18 @@ export const generateNewListDefinition = ({ numId, listType, level, start, text, const newNumDef = getBasicNumIdTag(numId, newAbstractId); newNumbering.definitions[numId] = newNumDef; + const newTranslatedNumbering = { ...editor.converter.translatedNumbering }; + if (!newTranslatedNumbering.definitions) newTranslatedNumbering.definitions = {}; + if (!newTranslatedNumbering.abstracts) newTranslatedNumbering.abstracts = {}; + // @ts-expect-error Remaining parameters are not needed for this translator + newTranslatedNumbering.definitions[numId] = wNumTranslator.encode({ + nodes: [newNumDef], + }); + // @ts-expect-error Remaining parameters are not needed for this translator + newTranslatedNumbering.abstracts[newAbstractId] = wAbstractNumTranslator.encode({ + nodes: [newAbstractDef], + }); + editor.converter.translatedNumbering = newTranslatedNumbering; // Update the editor's numbering with the new definition editor.converter.numbering = newNumbering; diff --git a/packages/super-editor/src/core/helpers/list-numbering-helpers.test.js b/packages/super-editor/src/core/helpers/list-numbering-helpers.test.js index 6b4f63e58..766794c8c 100644 --- a/packages/super-editor/src/core/helpers/list-numbering-helpers.test.js +++ b/packages/super-editor/src/core/helpers/list-numbering-helpers.test.js @@ -40,6 +40,10 @@ describe('getListDefinitionDetails', () => { definitions: mockDefinitions, abstracts: mockAbstracts, }, + translatedNumbering: { + definitions: {}, + abstracts: {}, + }, convertedXml: 'xml', }, emit: vi.fn(), // Add mock emit function diff --git a/packages/super-editor/src/core/super-converter/v2/importer/docxImporter.js b/packages/super-editor/src/core/super-converter/v2/importer/docxImporter.js index 9cd8ec06b..a7c903433 100644 --- a/packages/super-editor/src/core/super-converter/v2/importer/docxImporter.js +++ b/packages/super-editor/src/core/super-converter/v2/importer/docxImporter.js @@ -36,6 +36,7 @@ import bookmarkStartAttrConfigs from '@converter/v3/handlers/w/bookmark-start/at import bookmarkEndAttrConfigs from '@converter/v3/handlers/w/bookmark-end/attributes/index.js'; import { translator as wStylesTranslator } from '@converter/v3/handlers/w/styles/index.js'; import { translator as wNumberingTranslator } from '@converter/v3/handlers/w/numbering/index.js'; +import { baseNumbering } from '@converter/v2/exporter/helpers/base-list.definitions.js'; /** * @typedef {import()} XmlNode @@ -598,8 +599,7 @@ export function translateStyleDefinitions(docx) { } function translateNumberingDefinitions(docx) { - const numbering = docx['word/numbering.xml']; - if (!numbering) return null; + const numbering = docx['word/numbering.xml'] ?? baseNumbering; const numberingElement = numbering.elements[0]; const parsedNumbering = wNumberingTranslator.encode({ nodes: [numberingElement] }); return parsedNumbering; diff --git a/packages/super-editor/src/tests/helpers/helpers.js b/packages/super-editor/src/tests/helpers/helpers.js index 9a551e71d..f497b97e6 100644 --- a/packages/super-editor/src/tests/helpers/helpers.js +++ b/packages/super-editor/src/tests/helpers/helpers.js @@ -110,7 +110,7 @@ export const getMinimalTranslatedLinkedStyles = () => ({ const createMinimalConverter = () => { const converter = new SuperConverter(); converter.translatedLinkedStyles = getMinimalTranslatedLinkedStyles(); - converter.translatedNumbering = {}; + converter.translatedNumbering = { definitions: {}, abstracts: {} }; return converter; }; @@ -134,6 +134,18 @@ const ensureTranslatedLinkedStyles = (converter) => { translated.styles.Normal.styleId ??= 'Normal'; }; +const ensureTranslatedNumbering = (converter) => { + if (!converter) return; + + if (!converter.translatedNumbering || typeof converter.translatedNumbering !== 'object') { + converter.translatedNumbering = { definitions: {}, abstracts: {} }; + return; + } + + converter.translatedNumbering.definitions ??= {}; + converter.translatedNumbering.abstracts ??= {}; +}; + /** * Instantiate a new test editor instance and wait for it to be ready. * @@ -198,6 +210,7 @@ export const initTestEditor = (options = {}) => { editor.converter = restOptions.converter; } ensureTranslatedLinkedStyles(editor.converter); + ensureTranslatedNumbering(editor.converter); return { editor,