diff --git a/packages/lexical-table/src/LexicalTableSelection.ts b/packages/lexical-table/src/LexicalTableSelection.ts
index ff1377eb63a..f4e94bdc87f 100644
--- a/packages/lexical-table/src/LexicalTableSelection.ts
+++ b/packages/lexical-table/src/LexicalTableSelection.ts
@@ -331,10 +331,13 @@ export class TableSelection implements BaseSelection {
}
getTextContent(): string {
- const nodes = this.getNodes();
+ const nodes = this.getNodes().filter((node) => $isTableCellNode(node));
let textContent = '';
for (let i = 0; i < nodes.length; i++) {
- textContent += nodes[i].getTextContent();
+ const node = nodes[i];
+ const row = node.__parent;
+ const nextRow = (nodes[i + 1] || {}).__parent;
+ textContent += node.getTextContent() + (nextRow !== row ? '\n' : '\t');
}
return textContent;
}
diff --git a/packages/lexical-table/src/__tests__/unit/LexicalTableNode.test.tsx b/packages/lexical-table/src/__tests__/unit/LexicalTableNode.test.tsx
index a560884f8d6..b11b99490b6 100644
--- a/packages/lexical-table/src/__tests__/unit/LexicalTableNode.test.tsx
+++ b/packages/lexical-table/src/__tests__/unit/LexicalTableNode.test.tsx
@@ -294,6 +294,56 @@ describe('LexicalTableNode tests', () => {
`
`,
);
});
+
+ test('Table plain text output validation', async () => {
+ const {editor} = testEnv;
+
+ await editor.update(() => {
+ const root = $getRoot();
+ const table = $createTableNodeWithDimensions(4, 4, true);
+ root.append(table);
+ });
+ await editor.update(() => {
+ const root = $getRoot();
+ const table = root.getLastChild();
+ if (table) {
+ const DOMTable = $getElementForTableNode(editor, table);
+ if (DOMTable) {
+ table
+ ?.getCellNodeFromCords(0, 0, DOMTable)
+ ?.getLastChild()
+ ?.append($createTextNode('1'));
+ table
+ ?.getCellNodeFromCords(1, 0, DOMTable)
+ ?.getLastChild()
+ ?.append($createTextNode(''));
+ table
+ ?.getCellNodeFromCords(2, 0, DOMTable)
+ ?.getLastChild()
+ ?.append($createTextNode('2'));
+ table
+ ?.getCellNodeFromCords(0, 1, DOMTable)
+ ?.getLastChild()
+ ?.append($createTextNode('3'));
+ table
+ ?.getCellNodeFromCords(1, 1, DOMTable)
+ ?.getLastChild()
+ ?.append($createTextNode('4'));
+ table
+ ?.getCellNodeFromCords(2, 1, DOMTable)
+ ?.getLastChild()
+ ?.append($createTextNode(''));
+ const selection = $createTableSelection();
+ selection.set(
+ table.__key,
+ table?.getCellNodeFromCords(0, 0, DOMTable)?.__key || '',
+ table?.getCellNodeFromCords(2, 1, DOMTable)?.__key || '',
+ );
+ expect(selection.getTextContent()).toBe(`1\t\t2\n3\t4\t\n`);
+ }
+ }
+ });
+ });
},
undefined,
,