From fc63e1577fe3a325cb8701b35f9d49a473fa5475 Mon Sep 17 00:00:00 2001 From: yusuke-oyama Date: Fri, 29 Nov 2024 00:18:30 +0900 Subject: [PATCH] make a tag link draggable with usePress --- packages/@react-aria/interactions/src/usePress.ts | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/@react-aria/interactions/src/usePress.ts b/packages/@react-aria/interactions/src/usePress.ts index a90b602cc39..e018aefe316 100644 --- a/packages/@react-aria/interactions/src/usePress.ts +++ b/packages/@react-aria/interactions/src/usePress.ts @@ -787,7 +787,7 @@ export function usePress(props: PressHookProps): PressResult { ]); // Remove user-select: none in case component unmounts immediately after pressStart - + useEffect(() => { return () => { if (!allowTextSelectionOnPress) { @@ -935,7 +935,15 @@ function isOverTarget(point: EventPoint, target: Element) { function shouldPreventDefaultDown(target: Element) { // We cannot prevent default if the target is a draggable element. - return !(target instanceof HTMLElement) || !target.hasAttribute('draggable'); + if (!(target instanceof HTMLElement)) { + return true; + } + + if (target.tagName === 'A' && target.getAttribute('draggable') !== 'false') { + return false; + } + + return !target.hasAttribute('draggable'); } function shouldPreventDefaultUp(target: Element) {