From 4a522abed99fce74c63814075a81e70e188b3d58 Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Sun, 2 Mar 2025 12:50:01 +0100 Subject: [PATCH] fix stuff --- PadelClub/Data/Tournament.swift | 6 +++- .../GroupStage/GroupStagesSettingsView.swift | 29 +++++++++---------- PadelClub/Views/Team/EditingTeamView.swift | 11 +++++-- .../Screen/InscriptionManagerView.swift | 4 +-- .../Screen/RegistrationSetupView.swift | 9 ++++-- .../Screen/TableStructureView.swift | 12 ++++---- 6 files changed, 41 insertions(+), 30 deletions(-) diff --git a/PadelClub/Data/Tournament.swift b/PadelClub/Data/Tournament.swift index aa8d85a..190d79f 100644 --- a/PadelClub/Data/Tournament.swift +++ b/PadelClub/Data/Tournament.swift @@ -1196,7 +1196,7 @@ defer { } } - func registrationIssues(selectedTeams: [TeamRegistration]) -> Int { + func registrationIssues(selectedTeams: [TeamRegistration]) async -> Int { let players : [PlayerRegistration] = unsortedPlayers() let callDateIssue : [TeamRegistration] = selectedTeams.filter { $0.callDate != nil && isStartDateIsDifferentThanCallDate($0) } let duplicates : [PlayerRegistration] = duplicates(in: players) @@ -2657,6 +2657,10 @@ defer { unsortedTeams().filter({ $0.hasRegisteredOnline() }) } + func shouldWarnOnlineRegistrationUpdates() -> Bool { + onlineTeams().isEmpty == false && hasEnded() == false && hasStarted() == false + } + func refreshTeamList() async throws { guard enableOnlineRegistration, refreshInProgress == false, hasEnded() == false else { return } refreshInProgress = true diff --git a/PadelClub/Views/GroupStage/GroupStagesSettingsView.swift b/PadelClub/Views/GroupStage/GroupStagesSettingsView.swift index 6961bae..ed98683 100644 --- a/PadelClub/Views/GroupStage/GroupStagesSettingsView.swift +++ b/PadelClub/Views/GroupStage/GroupStagesSettingsView.swift @@ -128,6 +128,18 @@ struct GroupStagesSettingsView: View { } } #endif + + Section { + menuGenerateGroupStage(.random) + } footer: { + Text("Redistribue les équipes par tirage au sort par chapeau") + } + + Section { + menuGenerateGroupStage(.snake) + } footer: { + Text("Redistribue les équipes par la méthode du serpentin") + } Section { RowButtonView("Retirer tous les horaires", role: .destructive) { @@ -144,30 +156,17 @@ struct GroupStagesSettingsView: View { } } } footer: { - Text("Retire les horaires pré-définis des matchs. Utile si vous avez convoqué mais que l'ordre des matchs à lancer n'est pas important.") + Text("Retire les horaires pré-définis des matchs. Utile si vous avez convoqué mais que l'ordre des matchs à lancer n'est pas important.").foregroundStyle(.logoRed).bold() } - if tournament.unsortedTeams().filter({ $0.groupStagePosition != nil }).isEmpty == false { Section { menuBuildAllGroupStages } footer: { - Text("Efface et recréé les poules, les horaires et les résultats existants seront perdus") + Text("Efface et recréé les poules, les horaires et les résultats existants seront perdus").foregroundStyle(.logoRed).bold() } } - Section { - menuGenerateGroupStage(.random) - } footer: { - Text("Redistribue les équipes par tirage au sort par chapeau") - } - - Section { - menuGenerateGroupStage(.snake) - } footer: { - Text("Redistribue les équipes par la méthode du serpentin") - } - let groupStages = tournament.groupStages() Section { diff --git a/PadelClub/Views/Team/EditingTeamView.swift b/PadelClub/Views/Team/EditingTeamView.swift index 7263dfd..62e8909 100644 --- a/PadelClub/Views/Team/EditingTeamView.swift +++ b/PadelClub/Views/Team/EditingTeamView.swift @@ -38,7 +38,7 @@ struct EditingTeamView: View { var hasChanged: Binding { Binding { - if tournament.enableOnlineRegistration == false { + if canSaveWithoutWarning() { return false } @@ -67,6 +67,7 @@ struct EditingTeamView: View { private func _resetTeam() { team.resetPositions() + team.qualified = false team.wildCardGroupStage = false team.walkOut = false team.wildCardBracket = false @@ -315,13 +316,13 @@ struct EditingTeamView: View { } } .onChange(of: registrationDate) { - if tournament.enableOnlineRegistration == false { + if canSaveWithoutWarning() { team.registrationDate = registrationDate _save() } } .onChange(of: [walkOut, wildCardBracket, wildCardGroupStage]) { - if tournament.enableOnlineRegistration == false { + if canSaveWithoutWarning() { _resetTeam() team.walkOut = walkOut team.wildCardBracket = wildCardBracket @@ -334,6 +335,10 @@ struct EditingTeamView: View { .navigationBarTitleDisplayMode(.inline) } + func canSaveWithoutWarning() -> Bool { + tournament.shouldWarnOnlineRegistrationUpdates() && tournament.teamCount <= tournament.unsortedTeamsCount() + } + private var confirmationReceived: Binding { Binding { team.confirmed() diff --git a/PadelClub/Views/Tournament/Screen/InscriptionManagerView.swift b/PadelClub/Views/Tournament/Screen/InscriptionManagerView.swift index af5f70c..f6b0387 100644 --- a/PadelClub/Views/Tournament/Screen/InscriptionManagerView.swift +++ b/PadelClub/Views/Tournament/Screen/InscriptionManagerView.swift @@ -192,8 +192,8 @@ struct InscriptionManagerView: View { self.teamsHash = _simpleHash(ids: selectedSortedTeams.map { $0.id }) } self.registrationIssues = nil - DispatchQueue.main.async { - self.registrationIssues = tournament.registrationIssues(selectedTeams: selectedSortedTeams) + Task { + self.registrationIssues = await tournament.registrationIssues(selectedTeams: selectedSortedTeams) } } diff --git a/PadelClub/Views/Tournament/Screen/RegistrationSetupView.swift b/PadelClub/Views/Tournament/Screen/RegistrationSetupView.swift index 7287b1b..54de58a 100644 --- a/PadelClub/Views/Tournament/Screen/RegistrationSetupView.swift +++ b/PadelClub/Views/Tournament/Screen/RegistrationSetupView.swift @@ -27,7 +27,6 @@ struct RegistrationSetupView: View { @State private var showMoreInfos: Bool = false @State private var hasChanges: Bool = false - @State private var displayWarning: Bool = false @Environment(\.dismiss) private var dismiss @@ -73,9 +72,14 @@ struct RegistrationSetupView: View { } + func displayWarning() -> Bool { + let unsortedTeamsCount = tournament.unsortedTeamsCount() + return tournament.shouldWarnOnlineRegistrationUpdates() && targetTeamCount != tournament.teamCount && (tournament.teamCount <= unsortedTeamsCount || targetTeamCount <= unsortedTeamsCount) + } + var body: some View { List { - if displayWarning, tournament.enableOnlineRegistration, tournament.onlineTeams().isEmpty == false, tournament.hasEnded() == false, tournament.hasStarted() == false { + if displayWarning() { Text("Attention, l'inscription en ligne est activée et vous avez des équipes inscrites en ligne, en modifiant la structure ces équipes seront intégrées ou retirées de votre sélection d'équipes. Padel Club saura prévenir les équipes inscrites en ligne automatiquement.") .foregroundStyle(.logoRed) } @@ -255,7 +259,6 @@ struct RegistrationSetupView: View { } .onChange(of: targetTeamCount) { - displayWarning = targetTeamCount != tournament.teamCount _hasChanged() } diff --git a/PadelClub/Views/Tournament/Screen/TableStructureView.swift b/PadelClub/Views/Tournament/Screen/TableStructureView.swift index a06979b..e9876a0 100644 --- a/PadelClub/Views/Tournament/Screen/TableStructureView.swift +++ b/PadelClub/Views/Tournament/Screen/TableStructureView.swift @@ -21,10 +21,13 @@ struct TableStructureView: View { @State private var updatedElements: Set = Set() @State private var structurePreset: PadelTournamentStructurePreset = .manual @State private var buildWildcards: Bool = true - @State private var displayWarning: Bool = false - @FocusState private var stepperFieldIsFocused: Bool + func displayWarning() -> Bool { + let unsortedTeamsCount = tournament.unsortedTeamsCount() + return tournament.shouldWarnOnlineRegistrationUpdates() && teamCount != tournament.teamCount && (tournament.teamCount <= unsortedTeamsCount || teamCount <= unsortedTeamsCount) + } + var qualifiedFromGroupStage: Int { groupStageCount * qualifiedPerGroupStage } @@ -60,7 +63,7 @@ struct TableStructureView: View { @ViewBuilder var body: some View { List { - if displayWarning, tournament.enableOnlineRegistration, tournament.onlineTeams().isEmpty == false, tournament.hasEnded() == false, tournament.hasStarted() == false { + if displayWarning() { Text("Attention, l'inscription en ligne est activée et vous avez des équipes inscrites en ligne, en modifiant la structure ces équipes seront intégrées ou retirées de votre sélection d'équipes. Padel Club saura prévenir les équipes inscrites en ligne automatiquement.") .foregroundStyle(.logoRed) } @@ -97,9 +100,6 @@ struct TableStructureView: View { } label: { Text("Nombre d'équipes") } - .onChange(of: teamCount) { - displayWarning = teamCount != tournament.teamCount - } LabeledContent { StepperView(count: $groupStageCount, minimum: 0, maximum: maxGroupStages) {