41 lines
1.3 KiB
Swift
41 lines
1.3 KiB
Swift
import SwiftUI
|
|
|
|
@MainActor
|
|
class EventsViewModel: ObservableObject {
|
|
@Published private(set) var events: [Event] = []
|
|
@Published private(set) var isLoading = false
|
|
@Published private(set) var error: Error?
|
|
|
|
private let pocketBaseService = PocketBaseService.shared
|
|
|
|
func loadEvents() async {
|
|
isLoading = true
|
|
error = nil
|
|
|
|
do {
|
|
let now = Date()
|
|
let calendar = Calendar.current
|
|
let todayStart = calendar.startOfDay(for: now)
|
|
|
|
// Keep events that either:
|
|
// 1. Start in the future (after today), or
|
|
// 2. Are today and haven't ended yet
|
|
events = try await pocketBaseService.fetchEvents()
|
|
.filter { event in
|
|
let eventStart = calendar.startOfDay(for: event.startDate)
|
|
if eventStart > todayStart {
|
|
return true // Future event
|
|
} else if eventStart == todayStart {
|
|
return event.endDate > now // Today's event that hasn't ended
|
|
}
|
|
return false
|
|
}
|
|
.sorted { $0.startDate < $1.startDate }
|
|
} catch {
|
|
self.error = error
|
|
}
|
|
|
|
isLoading = false
|
|
}
|
|
}
|