Your route
route name in code: RoutePreview
How to get here / where to go
Section titled “How to get here / where to go”Incoming
Section titled “Incoming”| Incoming | kind | Control |
|---|---|---|
| Route builder — start and time | navigate | — |
Outgoing
Section titled “Outgoing”| Outgoing | kind | Control |
|---|---|---|
| Before the tour starts | navigate | — |
Capabilities on this screen
Section titled “Capabilities on this screen”| Capability | Status | Proof | ADO |
|---|---|---|---|
| Route timeline: dwell and walk-to-next per stop, exactly one peak stop, ticket and crowd chips | works | e2eRoutePreview.routeTimeline ✓e2e RoutePreview.stopRow ✓RNTL RoutePreviewScreen.test.tsx ✓RNTL RoutePreviewScreen.test.tsx ✓RNTL RoutePreviewScreen.test.tsx ✓ | — |
| Stop details in a sheet: description, swap alternatives with recomputed timing; the peak and meals are locked | partial | e2eRoutePreview.stopDetailSheet ✓RNTL RoutePreview.detailSwap ✓RNTL RoutePreviewScreen.test.tsx ✓RNTL RoutePreviewScreen.test.tsx ✓RNTL RoutePreviewScreen.test.tsx ✓ | #219 (Active) |
| Swapping several stops at once: long-press selects, regeneration excludes the selection | works | RNTLRoutePreview.swapSelected ✓RNTL RoutePreview.stopCheck ·RNTL RoutePreviewScreen.test.tsx ✓RNTL RoutePreviewScreen.test.tsx ✓ | — |
| Saving the route for signed-in users (with the start point); a guest is asked to sign in | works | e2eRoutePreview.saveRoute ✓e2e RoutePreview.saveSigninPrompt ✓RNTL RoutePreviewScreen.test.tsx ✓RNTL RoutePreviewScreen.test.tsx ✓API toursSave.test.ts ✓ | — |
| Starting the tour from the preview; when the start time is over 30 minutes old the app asks first | works | RNTLRoutePreviewScreen.test.tsx ✓RNTL RoutePreviewScreen.test.tsx ✓ | — |
Controls
Section titled “Controls”| Control | Label | element | Proof (last green build) |
|---|---|---|---|
save-signin-prompt | no label | ThemedAlert.alert | RNTL×2 e2e×3 |
route-timeline | no label | ScrollView | e2e×1 |
stop-row-* (dynamic) | no label | Pressable | RNTL×7 e2e×2 |
stop-check-* (dynamic) | no label | Ionicons | no proof |
swap-select-cancel | Cancel | Button | no proof |
swap-selected | Swap selected ({{count}}) | Button | RNTL×1 |
save-route | Saved | Button | e2e×2 |
stop-detail-sheet | no label | View | RNTL×2 e2e×1 |
stop-detail-scroll | no label | ScrollView | RNTL×1 e2e×1 |
detail-swap | Swap this stop | Button | RNTL×1 |
Controls are attributed one level deep: shared components count for the screen that renders them directly.
Last change of the screen file: 3e651f3 (2026-08-30)