+}
+
+export function insertOrUpdateLink(editor: LexicalEditor, linkDetails: {text: string, title: string, target: string, url: string}) {
+ editor.update(() => {
+ const selection = $getSelection();
+ let link = $getNodeFromSelection(selection, $isLinkNode);
+ if ($isLinkNode(link)) {
+ link.setURL(linkDetails.url);
+ link.setTarget(linkDetails.target);
+ link.setTitle(linkDetails.title);
+ } else {
+ link = $createLinkNode(linkDetails.url, {
+ title: linkDetails.title,
+ target: linkDetails.target,
+ });
+
+ $insertNodes([link]);
+ }
+
+ if ($isLinkNode(link)) {
+ for (const child of link.getChildren()) {
+ child.remove(true);
+ }
+ link.append($createTextNode(linkDetails.text));
+ }
+ });