Add region-based filtering and route length diversity

- Add RegionMapSelector UI for geographic trip filtering (East/Central/West)
- Add RouteFilters module for allowRepeatCities preference
- Improve GameDAGRouter to preserve route length diversity
  - Routes now grouped by city count before scoring
  - Ensures 2-city trips appear alongside longer trips
  - Increased beam width and max options for better coverage
- Add TripOptionsView filters (max cities slider, pace filter)
- Remove TravelStyle section from trip creation (replaced by region selector)
- Clean up debug logging from DataProvider and ScenarioAPlanner

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Trey t
2026-01-09 15:18:37 -06:00
parent 3e778473e6
commit f5e509a9ae
20 changed files with 952 additions and 3245 deletions

View File

@@ -26,10 +26,6 @@ final class SettingsViewModel {
didSet { savePreferences() }
}
var maxTripOptions: Int {
didSet { savePreferences() }
}
// MARK: - Sync State
private(set) var isSyncing = false
@@ -61,9 +57,6 @@ final class SettingsViewModel {
let savedDrivingHours = defaults.integer(forKey: "maxDrivingHoursPerDay")
self.maxDrivingHoursPerDay = savedDrivingHours == 0 ? 8 : savedDrivingHours
let savedMaxTripOptions = defaults.integer(forKey: "maxTripOptions")
self.maxTripOptions = savedMaxTripOptions == 0 ? 10 : savedMaxTripOptions
// Last sync
self.lastSyncDate = defaults.object(forKey: "lastSyncDate") as? Date
@@ -101,7 +94,6 @@ final class SettingsViewModel {
selectedTheme = .teal
selectedSports = Set(Sport.supported)
maxDrivingHoursPerDay = 8
maxTripOptions = 10
}
// MARK: - Persistence
@@ -110,6 +102,5 @@ final class SettingsViewModel {
let defaults = UserDefaults.standard
defaults.set(selectedSports.map(\.rawValue), forKey: "selectedSports")
defaults.set(maxDrivingHoursPerDay, forKey: "maxDrivingHoursPerDay")
defaults.set(maxTripOptions, forKey: "maxTripOptions")
}
}