fix(trip): remove buffer days from trip planner
Buffer days added no value to trip planning. Itineraries now show only game days and necessary travel days without extra padding. Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -77,9 +77,6 @@ final class TripCreationViewModel {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Trip duration for game-first mode (days before/after selected games)
|
|
||||||
var tripBufferDays: Int = 2
|
|
||||||
|
|
||||||
// Games
|
// Games
|
||||||
var mustSeeGameIds: Set<UUID> = []
|
var mustSeeGameIds: Set<UUID> = []
|
||||||
var availableGames: [RichGame] = []
|
var availableGames: [RichGame] = []
|
||||||
@@ -174,11 +171,7 @@ final class TripCreationViewModel {
|
|||||||
let gameDates = selectedGames.map { $0.game.dateTime }
|
let gameDates = selectedGames.map { $0.game.dateTime }
|
||||||
guard let earliest = gameDates.min(),
|
guard let earliest = gameDates.min(),
|
||||||
let latest = gameDates.max() else { return nil }
|
let latest = gameDates.max() else { return nil }
|
||||||
|
return (earliest, latest)
|
||||||
let calendar = Calendar.current
|
|
||||||
let bufferedStart = calendar.date(byAdding: .day, value: -tripBufferDays, to: earliest) ?? earliest
|
|
||||||
let bufferedEnd = calendar.date(byAdding: .day, value: tripBufferDays, to: latest) ?? latest
|
|
||||||
return (bufferedStart, bufferedEnd)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Actions
|
// MARK: - Actions
|
||||||
@@ -459,7 +452,6 @@ final class TripCreationViewModel {
|
|||||||
selectedSports = [.mlb]
|
selectedSports = [.mlb]
|
||||||
startDate = Date()
|
startDate = Date()
|
||||||
endDate = Date().addingTimeInterval(86400 * 7)
|
endDate = Date().addingTimeInterval(86400 * 7)
|
||||||
tripBufferDays = 2
|
|
||||||
mustSeeGameIds = []
|
mustSeeGameIds = []
|
||||||
numberOfStops = 5
|
numberOfStops = 5
|
||||||
leisureLevel = .moderate
|
leisureLevel = .moderate
|
||||||
|
|||||||
@@ -66,7 +66,6 @@ struct TripCreationView: View {
|
|||||||
// Sports + Game Picker
|
// Sports + Game Picker
|
||||||
sportsSection
|
sportsSection
|
||||||
gameBrowserSection
|
gameBrowserSection
|
||||||
tripBufferSection
|
|
||||||
|
|
||||||
case .locations:
|
case .locations:
|
||||||
// Locations + Sports + optional games
|
// Locations + Sports + optional games
|
||||||
@@ -493,34 +492,6 @@ struct TripCreationView: View {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private var tripBufferSection: some View {
|
|
||||||
ThemedSection(title: "Trip Duration") {
|
|
||||||
ThemedStepper(
|
|
||||||
label: "Buffer Days",
|
|
||||||
value: viewModel.tripBufferDays,
|
|
||||||
range: 0...7,
|
|
||||||
onIncrement: { viewModel.tripBufferDays += 1 },
|
|
||||||
onDecrement: { viewModel.tripBufferDays -= 1 }
|
|
||||||
)
|
|
||||||
|
|
||||||
if let dateRange = viewModel.gameFirstDateRange {
|
|
||||||
HStack {
|
|
||||||
Text("Trip window:")
|
|
||||||
.font(.system(size: Theme.FontSize.caption))
|
|
||||||
.foregroundStyle(Theme.textSecondary(colorScheme))
|
|
||||||
Spacer()
|
|
||||||
Text("\(dateRange.start.formatted(date: .abbreviated, time: .omitted)) - \(dateRange.end.formatted(date: .abbreviated, time: .omitted))")
|
|
||||||
.font(.system(size: Theme.FontSize.caption, weight: .medium))
|
|
||||||
.foregroundStyle(Theme.warmOrange)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
Text("Days before first game and after last game for travel/rest")
|
|
||||||
.font(.system(size: Theme.FontSize.micro))
|
|
||||||
.foregroundStyle(Theme.textMuted(colorScheme))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private var sportsSection: some View {
|
private var sportsSection: some View {
|
||||||
let sports = Sport.supported
|
let sports = Sport.supported
|
||||||
let rows = sports.chunked(into: 4)
|
let rows = sports.chunked(into: 4)
|
||||||
|
|||||||
Reference in New Issue
Block a user