From 2889ccd9f3f63623285efead59564e15c305a551 Mon Sep 17 00:00:00 2001 From: Sergey Gorbachev Date: Wed, 25 Sep 2024 04:44:55 +0300 Subject: [PATCH] [lexical-link] Bug Fix: Removing a link from descendants (#6656) --- packages/lexical-link/src/index.ts | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/packages/lexical-link/src/index.ts b/packages/lexical-link/src/index.ts index fe2b9757048..1ddb4dcec47 100644 --- a/packages/lexical-link/src/index.ts +++ b/packages/lexical-link/src/index.ts @@ -18,7 +18,11 @@ import type { SerializedElementNode, } from 'lexical'; -import {addClassNamesToElement, isHTMLAnchorElement} from '@lexical/utils'; +import { + $findMatchingParent, + addClassNamesToElement, + isHTMLAnchorElement, +} from '@lexical/utils'; import { $applyNodeReplacement, $getSelection, @@ -495,16 +499,20 @@ export function $toggleLink( if (url === null) { // Remove LinkNodes nodes.forEach((node) => { - const parent = node.getParent(); + const parentLink = $findMatchingParent( + node, + (parent): parent is LinkNode => + !$isAutoLinkNode(parent) && $isLinkNode(parent), + ); - if (!$isAutoLinkNode(parent) && $isLinkNode(parent)) { - const children = parent.getChildren(); + if (parentLink) { + const children = parentLink.getChildren(); for (let i = 0; i < children.length; i++) { - parent.insertBefore(children[i]); + parentLink.insertBefore(children[i]); } - parent.remove(); + parentLink.remove(); } }); } else {