You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
PadelClub/PadelClub/Views/Tournament/Screen/Components/TournamentStatusView.swift

136 lines
5.2 KiB

//
// TournamentStatusView.swift
// PadelClub
//
// Created by Razmig Sarkissian on 01/05/2024.
//
import SwiftUI
import LeStorage
struct TournamentStatusView: View {
@Environment(\.dismiss) private var dismiss
@Environment(NavigationViewModel.self) private var navigation: NavigationViewModel
@EnvironmentObject var dataStore: DataStore
@Bindable var tournament: Tournament
var eventDismiss: Bool = false
var body: some View {
Form {
#if _DEBUG_OPTIONS
RowButtonView("debug: Un-delete le tournoi") {
tournament.endDate = nil
tournament.isDeleted.toggle()
}
#endif
Section {
if tournament.endDate == nil {
RowButtonView("Terminer le tournoi", role: .destructive) {
tournament.endDate = Date()
}
} else {
RowButtonView("Ré-ouvrir le tournoi", role: .destructive) {
tournament.endDate = nil
}
}
} footer: {
if tournament.endDate == nil {
Text("Indique une date de fin pour le tournoi. Il sera considéré terminé.")
} else {
Text("Retire la date de fin du tournoi. Il sera considéré en cours.")
}
}
Section {
RowButtonView("Supprimer le tournoi", role: .destructive) {
if tournament.payment == nil {
do {
let event = tournament.eventObject()
let isLastTournament = event?.tournaments.count == 1
try dataStore.tournaments.delete(instance: tournament)
if let event, isLastTournament {
try dataStore.events.delete(instance: event)
}
if eventDismiss == false || isLastTournament {
navigation.path = NavigationPath()
} else {
dismiss()
}
} catch {
Logger.error(error)
}
} else {
tournament.endDate = Date()
tournament.isDeleted = true
tournament.navigationPath.removeAll()
do {
try dataStore.tournaments.addOrUpdate(instance: tournament)
if eventDismiss == false {
navigation.path = NavigationPath()
} else {
dismiss()
}
} catch {
Logger.error(error)
}
}
}
} footer: {
if tournament.payment == nil {
Text("Ce tournoi sera supprimé et n'a pas été comptabilisé dans vos achats. Toutes les données seront supprimées.")
} else {
Text("Ce tournoi sera supprimé et a déjà été comptabilisé dans vos achats. Toutes les données seront supprimées.")
}
}
if tournament.hasEnded() == false && tournament.isCanceled == false {
Section {
RowButtonView("Annuler le tournoi", role: .destructive) {
tournament.endDate = Date()
tournament.isCanceled = true
do {
try dataStore.tournaments.addOrUpdate(instance: tournament)
} catch {
Logger.error(error)
}
dismiss()
}
} footer: {
Text(.init("Si votre tournoi n'a pas pu aboutir à cause de la météo ou autre, vous pouvez l'annuler et il ne sera pas comptabilisé dans vos achats. Toutes les données du tournoi seront conservées. Le tournoi reste visible sur [Padel Club](\(URLs.main.rawValue))"))
}
}
// Section {
// Toggle(isOn: $tournament.isPrivate) {
// Text("Tournoi privé")
// }
// } footer: {
// Text(.init("Le tournoi sera masqué sur le site [Padel Club](\(URLs.main.rawValue))"))
// }
}
.navigationTitle("Gestion du tournoi")
.toolbarBackground(.visible, for: .navigationBar)
.onChange(of: tournament.endDate) {
_save()
}
.onChange(of: tournament.isDeleted) {
_save()
}
.onChange(of: tournament.isCanceled) {
_save()
}
}
private func _save() {
do {
try dataStore.tournaments.addOrUpdate(instance: tournament)
} catch {
Logger.error(error)
}
}
}
//#Preview {
// TournamentStatusView()
//}