WP-FE-ROUTE-NAV-SCENARIOS-01 — Nav scenarios + auto-reroute
Domain: D-ROUTE · Surface: CON · Status: IMP · Date: 2026-08-13
Goal
Con trỏ + la bàn liên tục (tận dụng GPS/compass phần cứng); khi đi sai đường tính lộ trình mới ngắn nhất từ vị trí hiện tại → đích (không giữ đường cũ); cover các kịch bản di chuyển.
Scenarios
| Scenario | Trigger | UX |
|---|---|---|
navigating |
On route | Banner bước hiện tại · camera follow |
approaching |
remaining ≤ 120m | Banner sắp đến |
wrong_way |
Heading lệch segment ≥110° khi đang chạy | Cảnh báo quay đầu |
off_route |
Snap >45m · hold ~2.8s | Chuẩn bị / đang chờ reroute |
rerouting |
Auto hoặc CTA | Spinner · gọi POST /routing/directions |
reroute_failed |
API lỗi | CTA Tìm đường lại |
gps_stale |
Fix >12s | Giữ la bàn · cảnh báo tín hiệu |
gps_denied |
Permission | CTA làm mới GPS |
paused |
User pause | Không advance / không auto-reroute |
arrived |
≤35m đích | Camera arrival |
Hardware
navMode:BestForNavigation· GPS ~2s / 2m ·watchHeadingAsyncluôn bậtenableNetworkProviderAsync+mayShowUserSettingsDialog- Heading: GPS course khi chạy · compass khi đứng · segment fallback
- Marker chevron
flat+rotation+tracksViewChangeskhi follow
Reroute
- Detect off-route liên tục ≥
OFF_ROUTE_HOLD_MS(2.8s) RoutingApi.directions({ from: GPS, to: dest })— provider OSRM/Mapbox/Haversine- Thay polyline + steps + ETA; không nối đường cũ
- Cooldown 12s giữa auto-reroute; manual luôn được
Files
| Path | Role |
|---|---|
mobile/src/features/places/useDeviceLocation.ts |
navMode + accuracyM |
mobile/src/features/routing/routeSnap.ts |
wrong-way helpers |
mobile/src/features/routing/useRouteNavSession.ts |
session + scenarios + reroute |
mobile/src/features/routing/screens/RouteActiveScreen.tsx |
UX theo scenario |
mobile/src/features/routing/components/RoutePolylinePreview.tsx |
tracksViewChanges |
Verify
- Device thật: xoay máy → chevron + camera xoay.
- Đi lệch tuyến >45m vài giây → banner reroute → polyline mới.
- Tắt GPS / chờ 12s →
gps_stale. - Pause → không auto-reroute.