Redesign trip option cards and fix various UI/planning issues
TripOptionCard improvements: - Replace horizontal route with vertical layout (start → end with arrow) - Remove rank badges (1, 2, 3, etc.) - Split stats into two rows: cities/miles and sports with game counts - Clear selection when navigating back from detail view Settings cleanup: - Remove unused settings (preferred game time, playoff games, notifications) - Convert remaining settings to sliders Planning fixes: - Fix multi-day driving calculation in canTransition - Remove over-restrictive trip rejection in TravelEstimator - Clear games cache when sport selection changes UI polish: - RoutePreviewStrip shows all cities (abbreviated) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -47,7 +47,15 @@ final class TripCreationViewModel {
|
||||
var endLocation: LocationInput?
|
||||
|
||||
// Sports
|
||||
var selectedSports: Set<Sport> = [.mlb]
|
||||
var selectedSports: Set<Sport> = [.mlb] {
|
||||
didSet {
|
||||
// Clear cached games when sports selection changes
|
||||
if selectedSports != oldValue {
|
||||
availableGames = []
|
||||
games = []
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// Dates
|
||||
var startDate: Date = Date()
|
||||
@@ -266,6 +274,10 @@ final class TripCreationViewModel {
|
||||
await loadScheduleData()
|
||||
}
|
||||
|
||||
// Read max trip options from settings (default 10)
|
||||
let savedMaxOptions = UserDefaults.standard.integer(forKey: "maxTripOptions")
|
||||
let maxTripOptions = savedMaxOptions > 0 ? min(20, savedMaxOptions) : 10
|
||||
|
||||
// Build preferences
|
||||
let preferences = TripPreferences(
|
||||
planningMode: planningMode,
|
||||
@@ -285,7 +297,8 @@ final class TripCreationViewModel {
|
||||
needsEVCharging: needsEVCharging,
|
||||
lodgingType: lodgingType,
|
||||
numberOfDrivers: numberOfDrivers,
|
||||
maxDrivingHoursPerDriver: maxDrivingHoursPerDriver
|
||||
maxDrivingHoursPerDriver: maxDrivingHoursPerDriver,
|
||||
maxTripOptions: maxTripOptions
|
||||
)
|
||||
|
||||
// Build planning request
|
||||
@@ -447,6 +460,9 @@ final class TripCreationViewModel {
|
||||
|
||||
/// Convert an itinerary option to a Trip (public for use by TripOptionsView)
|
||||
func convertOptionToTrip(_ option: ItineraryOption) -> Trip {
|
||||
let savedMaxOptions = UserDefaults.standard.integer(forKey: "maxTripOptions")
|
||||
let maxOptions = savedMaxOptions > 0 ? min(20, savedMaxOptions) : 10
|
||||
|
||||
let preferences = currentPreferences ?? TripPreferences(
|
||||
planningMode: planningMode,
|
||||
startLocation: nil,
|
||||
@@ -465,7 +481,8 @@ final class TripCreationViewModel {
|
||||
needsEVCharging: needsEVCharging,
|
||||
lodgingType: lodgingType,
|
||||
numberOfDrivers: numberOfDrivers,
|
||||
maxDrivingHoursPerDriver: maxDrivingHoursPerDriver
|
||||
maxDrivingHoursPerDriver: maxDrivingHoursPerDriver,
|
||||
maxTripOptions: maxOptions
|
||||
)
|
||||
return convertToTrip(option: option, preferences: preferences)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user