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/TournamentBuildView.swift

139 lines
4.8 KiB

//
// TournamentBuildView.swift
// PadelClub
//
// Created by Razmig Sarkissian on 19/05/2024.
//
import SwiftUI
struct TournamentBuildView: View {
var tournament: Tournament
@State private var bracketStatus: String?
@State private var groupStageStatus: String?
@State private var callStatus: Tournament.TournamentStatus?
@State private var scheduleStatus: Tournament.TournamentStatus?
@State private var cashierStatus: Tournament.TournamentStatus?
@ViewBuilder
var body: some View {
if tournament.hasEnded() {
Section {
NavigationLink(value: Screen.rankings) {
Text("Classement")
}
}
}
Section {
if tournament.groupStageCount > 0 {
NavigationLink(value: Screen.groupStage) {
LabeledContent {
if let groupStageStatus {
Text(groupStageStatus)
.multilineTextAlignment(.trailing)
} else {
ProgressView()
}
} label: {
Text("Poules")
if tournament.shouldVerifyGroupStage {
Text("Vérifier les poules").foregroundStyle(.logoRed)
}
}
}
.task {
groupStageStatus = await tournament.groupStageStatus()
}
}
if tournament.rounds().isEmpty == false {
NavigationLink(value: Screen.round) {
LabeledContent {
if let bracketStatus {
Text(bracketStatus)
.multilineTextAlignment(.trailing)
} else {
ProgressView()
}
} label: {
Text("Tableau")
if tournament.shouldVerifyBracket {
Text("Vérifier la tableau").foregroundStyle(.logoRed)
}
}
}
.task {
bracketStatus = await tournament.bracketStatus()
}
}
}
Section {
if tournament.state() != .finished {
NavigationLink(value: Screen.schedule) {
let tournamentStatus = scheduleStatus
LabeledContent {
if let tournamentStatus {
Text(tournamentStatus.completion)
} else {
ProgressView()
}
} label: {
Text("Horaires")
if let tournamentStatus {
Text(tournamentStatus.label)
}
}
}
.task {
scheduleStatus = await tournament.scheduleStatus()
}
NavigationLink(value: Screen.call) {
let tournamentStatus = callStatus
LabeledContent {
if let tournamentStatus {
Text(tournamentStatus.completion)
} else {
ProgressView()
}
} label: {
Text("Convocations")
if let tournamentStatus {
Text(tournamentStatus.label)
}
}
}
.task {
callStatus = await tournament.callStatus()
}
}
if tournament.state() == .running || tournament.state() == .finished {
NavigationLink(value: Screen.cashier) {
let tournamentStatus = cashierStatus
LabeledContent {
if let tournamentStatus {
Text(tournamentStatus.completion)
} else {
ProgressView()
}
} label: {
Text("Encaissement")
if let tournamentStatus {
Text(tournamentStatus.label)
}
}
}
.task {
cashierStatus = await tournament.cashierStatus()
}
}
}
}
}
#Preview {
TournamentBuildView(tournament: Tournament.mock())
}