diff --git a/app/soapbox/features/compose/editor/index.tsx b/app/soapbox/features/compose/editor/index.tsx index 8ebd07321..45d715584 100644 --- a/app/soapbox/features/compose/editor/index.tsx +++ b/app/soapbox/features/compose/editor/index.tsx @@ -152,7 +152,7 @@ const ComposeEditor = React.forwardRef(({ contentEditable={
(null); const activeEditorRef = useRef(null); + const deleteNode = useCallback( + () => { + editor.update(() => { + const node = $getNodeByKey(nodeKey); + if ($isImageNode(node)) { + node.remove(); + } + }); + }, + [nodeKey], + ); + const onDelete = useCallback( (payload: KeyboardEvent) => { if (isSelected && $isNodeSelection($getSelection())) { const event: KeyboardEvent = payload; event.preventDefault(); - const node = $getNodeByKey(nodeKey); - if ($isImageNode(node)) { - node.remove(); - } + deleteNode(); } return false; }, @@ -235,12 +247,20 @@ export default function ImageComponent({ return ( <> -
+
+ { if (domNode instanceof HTMLImageElement) { const { alt: altText, src } = domNode; const node = $createImageNode({ altText, src }); return { node }; } return null; -} +}; type SerializedImageNode = Spread< { @@ -146,11 +146,11 @@ class ImageNode extends DecoratorNode { } -function $createImageNode({ +const $createImageNode = ({ altText = '', src, key, -}: ImagePayload): ImageNode { +}: ImagePayload): ImageNode => { return $applyNodeReplacement( new ImageNode( src, @@ -158,7 +158,7 @@ function $createImageNode({ key, ), ); -} +}; const $isImageNode = ( node: LexicalNode | null | undefined, diff --git a/app/soapbox/features/compose/editor/plugins/floating-block-type-toolbar-plugin.tsx b/app/soapbox/features/compose/editor/plugins/floating-block-type-toolbar-plugin.tsx index 95d3fe6d7..cd8afed94 100644 --- a/app/soapbox/features/compose/editor/plugins/floating-block-type-toolbar-plugin.tsx +++ b/app/soapbox/features/compose/editor/plugins/floating-block-type-toolbar-plugin.tsx @@ -183,7 +183,7 @@ const BlockTypeFloatingToolbar = ({ const selection = $getSelection(); if ($isRangeSelection(selection) || DEPRECATED_$isGridSelection(selection)) { const selectionNode = selection.anchor.getNode(); - selectionNode.replace($createImageNode({ src })); + selectionNode.replace($createImageNode({ altText: '', src })); } }); };