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:
@@ -0,0 +1,105 @@
|
||||
appId: ${PASEO_MAESTRO_APP_ID}
|
||||
---
|
||||
- launchApp:
|
||||
clearState: true
|
||||
|
||||
- runFlow: flows/dev-client.yaml
|
||||
- runFlow: flows/connect-direct-if-welcome.yaml
|
||||
|
||||
- extendedWaitUntil:
|
||||
visible:
|
||||
id: "menu-button"
|
||||
timeout: 60000
|
||||
|
||||
- tapOn:
|
||||
id: "menu-button"
|
||||
|
||||
- extendedWaitUntil:
|
||||
visible:
|
||||
id: "sidebar-project-list"
|
||||
timeout: 10000
|
||||
|
||||
- extendedWaitUntil:
|
||||
visible:
|
||||
text: ".*${PASEO_MAESTRO_DRAG_A_NAME}, Create a new workspace for ${PASEO_MAESTRO_DRAG_A_NAME}, Project actions"
|
||||
timeout: 30000
|
||||
- extendedWaitUntil:
|
||||
visible:
|
||||
text: ".*${PASEO_MAESTRO_DRAG_B_NAME}, Create a new workspace for ${PASEO_MAESTRO_DRAG_B_NAME}, Project actions"
|
||||
timeout: 30000
|
||||
|
||||
# A slow swipe stays inside the stationary slop long enough to arm the native
|
||||
# long-press drag before it moves the second project above the first.
|
||||
- assertVisible:
|
||||
text: ".*${PASEO_MAESTRO_DRAG_A_NAME}, Create a new workspace for ${PASEO_MAESTRO_DRAG_A_NAME}, Project actions"
|
||||
above:
|
||||
text: ".*${PASEO_MAESTRO_DRAG_B_NAME}, Create a new workspace for ${PASEO_MAESTRO_DRAG_B_NAME}, Project actions"
|
||||
- swipe:
|
||||
from:
|
||||
text: ".*${PASEO_MAESTRO_DRAG_B_NAME}, Create a new workspace for ${PASEO_MAESTRO_DRAG_B_NAME}, Project actions"
|
||||
direction: UP
|
||||
duration: 20000
|
||||
waitToSettleTimeoutMs: 0
|
||||
|
||||
# A second touch during the drop spring must not cancel the committed reorder.
|
||||
- tapOn:
|
||||
text: ".*${PASEO_MAESTRO_DRAG_B_NAME}, Create a new workspace for ${PASEO_MAESTRO_DRAG_B_NAME}, Project actions"
|
||||
- assertVisible:
|
||||
text: ".*${PASEO_MAESTRO_DRAG_B_NAME}, Create a new workspace for ${PASEO_MAESTRO_DRAG_B_NAME}, Project actions"
|
||||
above:
|
||||
text: ".*${PASEO_MAESTRO_DRAG_A_NAME}, Create a new workspace for ${PASEO_MAESTRO_DRAG_A_NAME}, Project actions"
|
||||
|
||||
# Horizontal intent after the lift belongs to panel close. It must cancel the
|
||||
# drag without committing another reorder or leaving the outer list locked.
|
||||
- swipe:
|
||||
from:
|
||||
text: ".*${PASEO_MAESTRO_DRAG_B_NAME}, Create a new workspace for ${PASEO_MAESTRO_DRAG_B_NAME}, Project actions"
|
||||
direction: LEFT
|
||||
duration: 20000
|
||||
- assertNotVisible:
|
||||
id: "sidebar-project-list"
|
||||
|
||||
- tapOn:
|
||||
id: "menu-button"
|
||||
- extendedWaitUntil:
|
||||
visible:
|
||||
id: "sidebar-project-list"
|
||||
timeout: 10000
|
||||
- assertVisible:
|
||||
text: ".*${PASEO_MAESTRO_DRAG_B_NAME}, Create a new workspace for ${PASEO_MAESTRO_DRAG_B_NAME}, Project actions"
|
||||
above:
|
||||
text: ".*${PASEO_MAESTRO_DRAG_A_NAME}, Create a new workspace for ${PASEO_MAESTRO_DRAG_A_NAME}, Project actions"
|
||||
|
||||
# Reaching a fixture at the bottom proves the nestable outer scroll was
|
||||
# unlocked by cancellation.
|
||||
- scrollUntilVisible:
|
||||
element:
|
||||
text: ".*${PASEO_MAESTRO_DRAG_Z_NAME}, Create a new workspace for ${PASEO_MAESTRO_DRAG_Z_NAME}, Project actions"
|
||||
direction: DOWN
|
||||
timeout: 30000
|
||||
speed: 40
|
||||
visibilityPercentage: 50
|
||||
centerElement: true
|
||||
- assertVisible:
|
||||
text: ".*${PASEO_MAESTRO_DRAG_Z_NAME}, Create a new workspace for ${PASEO_MAESTRO_DRAG_Z_NAME}, Project actions"
|
||||
|
||||
- scrollUntilVisible:
|
||||
element:
|
||||
text: ".*${PASEO_MAESTRO_DRAG_A_NAME}, Create a new workspace for ${PASEO_MAESTRO_DRAG_A_NAME}, Project actions"
|
||||
direction: UP
|
||||
timeout: 30000
|
||||
speed: 40
|
||||
visibilityPercentage: 50
|
||||
centerElement: true
|
||||
|
||||
# A real reorder after cancellation proves the list is not merely scrollable;
|
||||
# its drag recognizer and semantic order update both recovered.
|
||||
- swipe:
|
||||
from:
|
||||
text: ".*${PASEO_MAESTRO_DRAG_A_NAME}, Create a new workspace for ${PASEO_MAESTRO_DRAG_A_NAME}, Project actions"
|
||||
direction: UP
|
||||
duration: 20000
|
||||
- assertVisible:
|
||||
text: ".*${PASEO_MAESTRO_DRAG_A_NAME}, Create a new workspace for ${PASEO_MAESTRO_DRAG_A_NAME}, Project actions"
|
||||
above:
|
||||
text: ".*${PASEO_MAESTRO_DRAG_B_NAME}, Create a new workspace for ${PASEO_MAESTRO_DRAG_B_NAME}, Project actions"
|
||||
Reference in New Issue
Block a user