Skip to content

Commit 568dc9a

Browse files
zurfyxjkjk822
authored andcommitted
Fix splitText when detached (#6501)
1 parent ab9d694 commit 568dc9a

File tree

2 files changed

+31
-17
lines changed

2 files changed

+31
-17
lines changed

packages/lexical/src/nodes/LexicalTextNode.ts

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -935,7 +935,7 @@ export class TextNode extends LexicalNode {
935935
return [self];
936936
}
937937
const firstPart = parts[0];
938-
const parent = self.getParentOrThrow();
938+
const parent = self.getParent();
939939
let writableNode;
940940
const format = self.getFormat();
941941
const style = self.getStyle();
@@ -1005,23 +1005,25 @@ export class TextNode extends LexicalNode {
10051005
}
10061006

10071007
// Insert the nodes into the parent's children
1008-
internalMarkSiblingsAsDirty(this);
1009-
const writableParent = parent.getWritable();
1010-
const insertionIndex = this.getIndexWithinParent();
1011-
if (hasReplacedSelf) {
1012-
writableParent.splice(insertionIndex, 0, splitNodes);
1013-
this.remove();
1014-
} else {
1015-
writableParent.splice(insertionIndex, 1, splitNodes);
1016-
}
1008+
if (parent !== null) {
1009+
internalMarkSiblingsAsDirty(this);
1010+
const writableParent = parent.getWritable();
1011+
const insertionIndex = this.getIndexWithinParent();
1012+
if (hasReplacedSelf) {
1013+
writableParent.splice(insertionIndex, 0, splitNodes);
1014+
this.remove();
1015+
} else {
1016+
writableParent.splice(insertionIndex, 1, splitNodes);
1017+
}
10171018

1018-
if ($isRangeSelection(selection)) {
1019-
$updateElementSelectionOnCreateDeleteNode(
1020-
selection,
1021-
parent,
1022-
insertionIndex,
1023-
partsLength - 1,
1024-
);
1019+
if ($isRangeSelection(selection)) {
1020+
$updateElementSelectionOnCreateDeleteNode(
1021+
selection,
1022+
parent,
1023+
insertionIndex,
1024+
partsLength - 1,
1025+
);
1026+
}
10251027
}
10261028

10271029
return splitNodes;

packages/lexical/src/nodes/__tests__/unit/LexicalTextNode.test.tsx

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -582,6 +582,18 @@ describe('LexicalTextNode tests', () => {
582582
});
583583
},
584584
);
585+
586+
test('with detached parent', async () => {
587+
await update(() => {
588+
const textNode = $createTextNode('foo');
589+
const splits = textNode.splitText(1, 2);
590+
expect(splits.map((split) => split.getTextContent())).toEqual([
591+
'f',
592+
'o',
593+
'o',
594+
]);
595+
});
596+
});
585597
});
586598

587599
describe('createDOM()', () => {

0 commit comments

Comments
 (0)