|
|
|
|
@ -17,6 +17,7 @@ struct CourtAvailabilitySettingsView: View { |
|
|
|
|
@State private var courtIndex: Int = 0 |
|
|
|
|
@State private var startDate: Date = Date() |
|
|
|
|
@State private var endDate: Date = Date() |
|
|
|
|
@State private var editingSlot: DateInterval? |
|
|
|
|
|
|
|
|
|
var courtsUnavailability: [Int: [DateInterval]] { |
|
|
|
|
let groupedBy = Dictionary(grouping: event.courtsUnavailability, by: { dateInterval in |
|
|
|
|
@ -55,6 +56,7 @@ struct CourtAvailabilitySettingsView: View { |
|
|
|
|
try? dataStore.dateIntervals.addOrUpdate(instance: duplicatedDateInterval) |
|
|
|
|
} |
|
|
|
|
Button("éditer") { |
|
|
|
|
editingSlot = dateInterval |
|
|
|
|
courtIndex = dateInterval.courtIndex |
|
|
|
|
startDate = dateInterval.startDate |
|
|
|
|
endDate = dateInterval.endDate |
|
|
|
|
@ -86,8 +88,9 @@ struct CourtAvailabilitySettingsView: View { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
.overlay { |
|
|
|
|
if courtsUnavailability.isEmpty { |
|
|
|
|
ContentUnavailableView { |
|
|
|
|
Label("Tous les terrains sont disponibles", systemImage: "checkmark.circle.fill") |
|
|
|
|
Label("Tous les terrains sont disponibles", systemImage: "checkmark.circle.fill").tint(.green) |
|
|
|
|
} description: { |
|
|
|
|
Text("Vous pouvez précisez l'indisponibilité d'une ou plusieurs terrains, que ce soit pour une journée entière ou un créneau précis.") |
|
|
|
|
} actions: { |
|
|
|
|
@ -96,9 +99,12 @@ struct CourtAvailabilitySettingsView: View { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
.toolbar { |
|
|
|
|
ToolbarItem(placement: .topBarTrailing) { |
|
|
|
|
BarButtonView("Ajouter une indisponibilité", icon: "plus.circle.fill") { |
|
|
|
|
startDate = tournament.startDate |
|
|
|
|
endDate = tournament.startDate.addingTimeInterval(5400) |
|
|
|
|
showingPopover = true |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
@ -119,14 +125,21 @@ struct CourtAvailabilitySettingsView: View { |
|
|
|
|
} footer: { |
|
|
|
|
FooterButtonView("jour entier") { |
|
|
|
|
startDate = startDate.startOfDay |
|
|
|
|
endDate = endDate.endOfDay() |
|
|
|
|
endDate = startDate.endOfDay() |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
.toolbar { |
|
|
|
|
ButtonValidateView { |
|
|
|
|
if editingSlot == nil { |
|
|
|
|
let dateInterval = DateInterval(event: event.id, courtIndex: courtIndex, startDate: startDate, endDate: endDate) |
|
|
|
|
try? dataStore.dateIntervals.addOrUpdate(instance: dateInterval) |
|
|
|
|
} else { |
|
|
|
|
editingSlot?.courtIndex = courtIndex |
|
|
|
|
editingSlot?.endDate = endDate |
|
|
|
|
editingSlot?.startDate = startDate |
|
|
|
|
try? dataStore.dateIntervals.addOrUpdate(instance: editingSlot!) |
|
|
|
|
} |
|
|
|
|
showingPopover = false |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|