feat(wizard): add mode-specific trip wizard inputs

- Add GamePickerStep with sheet-based Sport → Team → Game selection
- Add TeamPickerStep with sheet-based Sport → Team selection
- Add LocationsStep for start/end location selection with round trip toggle
- Update TripWizardViewModel with mode-specific fields and validation
- Update TripWizardView with conditional step rendering per mode
- Update ReviewStep with mode-aware validation display
- Fix gameFirst mode to derive date range from selected games

Each planning mode now shows only relevant steps:
- By Dates: Dates → Sports → Regions → Route → Repeat → Must Stops
- By Games: Game Picker → Route → Repeat → Must Stops
- By Route: Locations → Dates → Sports → Route → Repeat → Must Stops
- Follow Team: Team Picker → Dates → Route → Repeat → Must Stops

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Trey t
2026-01-14 22:21:57 -06:00
parent 1301442604
commit aa34c6585a
7 changed files with 1277 additions and 63 deletions

View File

@@ -31,6 +31,16 @@ struct LocationSearchSheet: View {
private let locationService = LocationService.shared
private var navigationTitle: String {
switch inputType {
case .mustStop: return "Add Must-Stop"
case .preferred: return "Add Preferred Location"
case .homeLocation: return "Set Home Location"
case .startLocation: return "Set Start Location"
case .endLocation: return "Set End Location"
}
}
var body: some View {
NavigationStack {
VStack(spacing: 0) {
@@ -96,7 +106,7 @@ struct LocationSearchSheet: View {
Spacer()
}
.navigationTitle(inputType == .mustStop ? "Add Must-Stop" : "Add Location")
.navigationTitle(navigationTitle)
.navigationBarTitleDisplayMode(.inline)
.toolbar {
ToolbarItem(placement: .cancellationAction) {