From d5434d1d8fe7ac4b485d9d8408edad07d775c83a Mon Sep 17 00:00:00 2001 From: Raz Date: Sat, 5 Apr 2025 06:08:46 +0200 Subject: [PATCH] improve some fields --- PadelClub/Data/Tournament.swift | 2 +- .../Cashier/Event/EventSettingsView.swift | 98 +++++++++++++++---- .../Navigation/Umpire/PadelClubView.swift | 2 +- .../TournamentGeneralSettingsView.swift | 1 - 4 files changed, 82 insertions(+), 21 deletions(-) diff --git a/PadelClub/Data/Tournament.swift b/PadelClub/Data/Tournament.swift index 6c82b89..d7f0045 100644 --- a/PadelClub/Data/Tournament.swift +++ b/PadelClub/Data/Tournament.swift @@ -1371,7 +1371,7 @@ defer { func localizedTournamentType() -> String { switch tournamentLevel { - case .unlisted: + case .unlisted, .championship: return tournamentLevel.localizedLevelLabel(.short) default: return tournamentLevel.localizedLevelLabel(.short) + tournamentCategory.localizedLabel(.short) diff --git a/PadelClub/Views/Cashier/Event/EventSettingsView.swift b/PadelClub/Views/Cashier/Event/EventSettingsView.swift index 4186a8b..a9f2a51 100644 --- a/PadelClub/Views/Cashier/Event/EventSettingsView.swift +++ b/PadelClub/Views/Cashier/Event/EventSettingsView.swift @@ -12,9 +12,10 @@ struct EventSettingsView: View { @EnvironmentObject var dataStore: DataStore @Bindable var event: Event @State private var eventName: String = "" - @FocusState private var textFieldIsFocus: Bool @State private var pageLink: PageLink = .teams - + @State private var tournamentInformation: String = "" + @FocusState private var focusedField: Tournament.CodingKeys? + func eventLinksPasteData() -> String { let tournaments = event.tournaments var link = [String]() @@ -41,6 +42,7 @@ struct EventSettingsView: View { init(event: Event) { self.event = event _eventName = State(wrappedValue: event.name ?? "") + _tournamentInformation = State(wrappedValue: event.tournaments.first?.information ?? "") } var body: some View { @@ -51,7 +53,7 @@ struct EventSettingsView: View { .keyboardType(.alphabet) .multilineTextAlignment(.leading) .frame(maxWidth: .infinity) - .focused($textFieldIsFocus) + .focused($focusedField, equals: ._name) } header: { Text("Nom de l'événement") } footer: { @@ -64,6 +66,39 @@ struct EventSettingsView: View { } } + if event.tournaments.first?.dayDuration == 3, event.tournaments.count == 3 { + Section { + RowButtonView("Répartir les tournois") { + for (index, tournament) in event.tournaments.enumerated() { + tournament.dayDuration = 1 + tournament.startDate = Calendar.current.date(byAdding: .day, value: 1 + index, to: tournament.startDate)! + } + _saveAllTournaments() + } + } + } + + Section { + ZStack { + Text(tournamentInformation).opacity(0) + Text(ContactType.defaultCustomMessage).opacity(0) + TextEditor(text: $tournamentInformation) + .keyboardType(.alphabet) + .focused($focusedField, equals: ._information) + } + .frame(maxHeight: 200) + .overlay { + if tournamentInformation.isEmpty, focusedField != ._information { + Text("Texte visible dans l'onglet informations sur Padel Club.").italic() + .foregroundStyle(.secondary) + } + } + } header: { + Text("Description d'un tournoi") + } footer: { + Text("Ce texte sera indiqué dans le champ information de tous les tournois de l'événement") + } + if event.club != nil { let eventLinksPasteData = eventLinksPasteData() Section { @@ -87,42 +122,69 @@ struct EventSettingsView: View { } } } - .navigationBarBackButtonHidden(textFieldIsFocus) + .navigationBarBackButtonHidden(focusedField != nil) .toolbar(content: { - if textFieldIsFocus { + if focusedField != nil { ToolbarItem(placement: .topBarLeading) { Button("Annuler", role: .cancel) { - textFieldIsFocus = false + focusedField = nil } } } }) + .toolbarBackground(.visible, for: .navigationBar) .toolbar { - if textFieldIsFocus { + if focusedField != nil { ToolbarItem(placement: .keyboard) { HStack { - Spacer() - Button("Valider") { - textFieldIsFocus = false - if eventName.trimmed.isEmpty == false { - event.name = eventName.prefixTrimmed(200) - } else { + if focusedField == ._name, eventName.isEmpty == false { + Button("Effacer") { event.name = nil + eventName = "" + } + .buttonStyle(.borderless) + } else if focusedField == ._information, tournamentInformation.isEmpty == false { + Button("Effacer") { + tournamentInformation = "" } - _save() + .buttonStyle(.borderless) + } + Spacer() + Button("Valider") { + focusedField = nil } .buttonStyle(.bordered) } } } } + .onChange(of: focusedField) { old, new in + if old == ._name { + let tournamentName = eventName.prefixMultilineTrimmed(200) + if tournamentName.isEmpty { + event.name = nil + } else { + event.name = eventName + } + } else if old == ._information { + tournamentInformation = tournamentInformation.prefixMultilineTrimmed(4000) + _saveAllTournaments() + } + } + .onChange(of: event.name) { + _save() + } } private func _save() { - do { - try dataStore.events.addOrUpdate(instance: event) - } catch { - Logger.error(error) + dataStore.events.addOrUpdate(instance: event) + } + + private func _saveAllTournaments() { + self.event.tournaments.forEach { tournament in + tournament.information = tournamentInformation } + + self.dataStore.tournaments.addOrUpdate(contentOfs: self.event.tournaments) } } diff --git a/PadelClub/Views/Navigation/Umpire/PadelClubView.swift b/PadelClub/Views/Navigation/Umpire/PadelClubView.swift index 5c66ff9..b7d1508 100644 --- a/PadelClub/Views/Navigation/Umpire/PadelClubView.swift +++ b/PadelClub/Views/Navigation/Umpire/PadelClubView.swift @@ -293,7 +293,7 @@ struct PadelClubView: View { print("after beach anonymousPlayers.count", anonymousPlayers.filter { $0.firstName.isEmpty && $0.lastName.isEmpty } .count) - SourceFileManager.shared.exportToCSV(players: okPlayers + anonymousPlayers, sourceFileType: fileURL.manData ? .messieurs : .dames, date: fileURL.dateFromPath) + SourceFileManager.shared.exportToCSV(players: players, sourceFileType: fileURL.manData ? .messieurs : .dames, date: fileURL.dateFromPath) SourceFileManager.shared.exportToCSV("anonymes", players: anonymousPlayers.filter { $0.firstName.isEmpty && $0.lastName.isEmpty }, sourceFileType: fileURL.manData ? .messieurs : .dames, date: fileURL.dateFromPath) } catch { Logger.error(error) diff --git a/PadelClub/Views/Tournament/Screen/Components/TournamentGeneralSettingsView.swift b/PadelClub/Views/Tournament/Screen/Components/TournamentGeneralSettingsView.swift index 3e90db3..4d74239 100644 --- a/PadelClub/Views/Tournament/Screen/Components/TournamentGeneralSettingsView.swift +++ b/PadelClub/Views/Tournament/Screen/Components/TournamentGeneralSettingsView.swift @@ -241,7 +241,6 @@ struct TournamentGeneralSettingsView: View { } else if old == ._umpireCustomContact { _confirmUmpireContact() } - _save() } }