From 397f504d0123b3d52a0b0e5285094b045b6d9939 Mon Sep 17 00:00:00 2001 From: Maurice Date: Wed, 29 Jul 2026 18:06:51 +0200 Subject: [PATCH] fix(planner): reach the day reorder popup with a finger too The popup is a modal, so it portals out of the sidebar and misses the opt-in its rows sit inside everywhere else. Its rows already carried a bare draggable attribute, which on a tablet meant a long press selected the row label and nothing moved. --- .../Planner/DayPlanSidebar.test.tsx | 25 +++++++++++++++++++ .../components/Planner/DayReorderPopup.tsx | 5 +++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/client/src/components/Planner/DayPlanSidebar.test.tsx b/client/src/components/Planner/DayPlanSidebar.test.tsx index 99bbc6669..c23e760a4 100644 --- a/client/src/components/Planner/DayPlanSidebar.test.tsx +++ b/client/src/components/Planner/DayPlanSidebar.test.tsx @@ -3836,4 +3836,29 @@ describe('reordering the day plan with a finger (#1616)', () => { teardown() } }) + + // The reorder popup renders inside the sidebar, so it inherits the opt-in and + // its day rows become draggable by finger too. Pinned so it stays deliberate. + it('FE-PLANNER-DAYPLAN-191: a long press reorders days in the reorder popup', async () => { + const onReorderDays = vi.fn().mockResolvedValue(undefined) + const days = [ + buildDay({ id: 10, date: '2025-06-01', title: 'Day 1' }), + buildDay({ id: 11, date: '2025-06-02', title: 'Day 2' }), + buildDay({ id: 12, date: '2025-06-03', title: 'Day 3' }), + ] + render() + fireEvent.click(screen.getByLabelText('Reorder days')) + const teardown = installTouchDragBridge() + try { + const rows = document.querySelectorAll('[draggable="true"]') + const from = [...rows].find(r => r.textContent?.includes('Day 1'))! + const to = [...rows].find(r => r.textContent?.includes('Day 3'))! + expect(from.closest('[data-touch-drag]')).not.toBeNull() + await longPress(from) + dragTo(to) + await waitFor(() => expect(onReorderDays).toHaveBeenCalled()) + } finally { + teardown() + } + }) }) diff --git a/client/src/components/Planner/DayReorderPopup.tsx b/client/src/components/Planner/DayReorderPopup.tsx index 0fe7e37a7..d3a45b297 100644 --- a/client/src/components/Planner/DayReorderPopup.tsx +++ b/client/src/components/Planner/DayReorderPopup.tsx @@ -85,7 +85,10 @@ export function DayReorderPopup({ isOpen, days, t, locale, onReorder, onAddDay, {t('dayplan.reorderHint')}

-
+ {/* The popup is a modal, so it portals out of the planner and has to opt + into the long-press drag itself (#1616). Without this a finger only + selects the row text. */} +
{ordered.map((day, index) => (