From 06acb51042f79314ffc031c60bfadc8afff4b8ba Mon Sep 17 00:00:00 2001 From: khoinguyenpham04 <137921741+khoinguyenpham04@users.noreply.github.com> Date: Sun, 16 Aug 2026 02:19:03 +0100 Subject: [PATCH 1/2] fix(admin): make image actions reliably selectable --- .../admin/src/components/editor/ImageNode.tsx | 25 ++++++-- .../tests/editor/image-selection.test.tsx | 62 +++++++++++++++++++ 2 files changed, 81 insertions(+), 6 deletions(-) create mode 100644 packages/admin/tests/editor/image-selection.test.tsx diff --git a/packages/admin/src/components/editor/ImageNode.tsx b/packages/admin/src/components/editor/ImageNode.tsx index a1331ff837..1663ca21b0 100644 --- a/packages/admin/src/components/editor/ImageNode.tsx +++ b/packages/admin/src/components/editor/ImageNode.tsx @@ -47,7 +47,14 @@ declare module "@tiptap/react" { } // React component for the image node view -function ImageNodeView({ node, updateAttributes, selected, deleteNode, editor }: NodeViewProps) { +function ImageNodeView({ + node, + updateAttributes, + selected, + deleteNode, + editor, + getPos, +}: NodeViewProps) { const { t } = useLingui(); const [isEditingAlt, setIsEditingAlt] = React.useState(false); const [altText, setAltText] = React.useState(node.attrs.alt || ""); @@ -75,6 +82,14 @@ function ImageNodeView({ node, updateAttributes, selected, deleteNode, editor }: setAltText(node.attrs.alt || ""); }, [node.attrs.alt]); + const handlePointerDown = (event: React.PointerEvent) => { + if (!editor.isEditable || !event.isPrimary || event.button !== 0) return; + const position = getPos(); + if (typeof position === "number") { + editor.commands.setNodeSelection(position); + } + }; + const getImageAttrs = (): ImageAttributes => ({ src: node.attrs.src, alt: node.attrs.alt, @@ -165,10 +180,8 @@ function ImageNodeView({ node, updateAttributes, selected, deleteNode, editor }: return (
+