fix event sharing stuff

newoffer2025
Raz 6 months ago
parent 888e02581a
commit eb112375fd
  1. 51
      PadelClubData/Data/Event.swift

@ -48,7 +48,7 @@ final public class Event: BaseEvent {
// MARK: - Computed dependencies // MARK: - Computed dependencies
public var tournaments: [Tournament] { public var tournaments: [Tournament] {
DataStore.shared.tournaments.filter { $0.event == self.id && $0.isDeleted == false } DataStore.shared.tournaments.filter { $0.event == self.id && $0.isDeleted == false }.sorted(by: \.startDate)
} }
public func clubObject() -> Club? { public func clubObject() -> Club? {
@ -104,6 +104,55 @@ final public class Event: BaseEvent {
return URL(string: URLs.main.url.appending(path: "event/\(id)").absoluteString.removingPercentEncoding!) return URL(string: URLs.main.url.appending(path: "event/\(id)").absoluteString.removingPercentEncoding!)
} }
public func formattedDateInterval() -> String {
let tournaments = self.tournaments
guard !tournaments.isEmpty else {
return "" // Handle empty tournament list
}
let firstTournament = tournaments.first!
let lastTournament = tournaments.last!
// Helper to check if two dates are on the same day
func isSameDay(date1: Date, date2: Date) -> Bool {
return Calendar.current.isDate(date1, inSameDayAs: date2)
}
// Scenario 1: Only one tournament
if tournaments.count == 1 {
return firstTournament.startDate.formattedAsDate()
}
// Scenario 2: Multiple tournaments, but all start and end on the same day (single-day event overall)
let overallEventIsSingleDay = isSameDay(date1: firstTournament.startDate, date2: lastTournament.startDate)
if overallEventIsSingleDay {
return firstTournament.startDate.formattedAsDate()
}
// Scenario 3: Multiple tournaments, spanning multiple days (requires "Du ... au ...")
let startDay = firstTournament.startDate.localizedDay()
let endDay = lastTournament.startDate.localizedDay()
let startMonthYear = firstTournament.startDate.monthYearFormatted
let endMonthYear = lastTournament.startDate.monthYearFormatted
let calendar = Calendar.current
let firstStartComponents = calendar.dateComponents([.year, .month], from: firstTournament.startDate)
let lastEndComponents = calendar.dateComponents([.year, .month], from: lastTournament.startDate)
if firstStartComponents.year == lastEndComponents.year && firstStartComponents.month == lastEndComponents.month {
// Same month and year: "Du 13 au 15 Juin 2025"
return "Du \(startDay) au \(endDay) \(startMonthYear)"
} else if firstStartComponents.year == lastEndComponents.year {
// Different months, same year: "Du 13 Juin au 15 Juillet 2025"
return "Du \(startDay) \(startMonthYear) au \(endDay) \(endMonthYear)"
} else {
// Different years: "Du 13 Juin 2025 au 15 Juin 2026"
return "Du \(startDay) \(startMonthYear) au \(endDay) \(endMonthYear)"
}
}
func insertOnServer() throws { func insertOnServer() throws {
DataStore.shared.events.writeChangeAndInsertOnServer(instance: self) DataStore.shared.events.writeChangeAndInsertOnServer(instance: self)
for tournament in self.tournaments { for tournament in self.tournaments {

Loading…
Cancel
Save