Fix mobile sidebar swipe and drag failures (#2709)

* fix(app): prevent text selection during Android swipes

Gesture interception did not cancel the native view where the touch began, leaving Android's pending text-selection action alive.

* fix(app): restore iOS sidebar close swipes

Fabric could fail to attach close handlers when their target lived inside retained but display-hidden panel content. Keep a registered native gesture host mounted outside the presentation wrapper so close swipes work over nested lists without activating rows.

* fix(app): recover sidebar drags after cancellation

Cancelled native drags could leave a lifted row and the shared outer list locked. Scope terminal cleanup to the owning gesture session and release the lock on cancellation or unmount.

* test(app): clean up partial drag fixtures
This commit is contained in:
Mohamed Boudra
2026-08-01 04:05:54 +08:00
committed by GitHub
parent eb1c7def54
commit 3778d0ad7b
11 changed files with 966 additions and 22 deletions
@@ -30,6 +30,7 @@ export function DraggableList<T>({
onRefresh,
extraData,
simultaneousGestureRef,
gestureHostPresented,
waitFor,
onDragBegin: onDragBeginProp,
nestable = false,
@@ -118,6 +119,7 @@ export function DraggableList<T>({
scrollEnabled={scrollEnabled}
extraData={extraData}
simultaneousHandlers={simultaneousHandlers}
dragGestureHostPresented={gestureHostPresented}
// Higher activation distance reduces accidental drag capture while nested
// lists are inside a scroll container.
activationDistance={20}