From c735c023bb66c04d05fc386e74f3c511865c7252 Mon Sep 17 00:00:00 2001 From: Razmig Sarkissian Date: Mon, 3 Jun 2024 22:34:58 +0200 Subject: [PATCH] fix stuff --- PadelClub.xcodeproj/project.pbxproj | 4 +-- PadelClub/Data/User.swift | 4 +-- PadelClub/Extensions/String+Extensions.swift | 8 ++++-- PadelClub/Views/Club/ClubDetailView.swift | 2 +- PadelClub/Views/Club/ClubRowView.swift | 3 +- .../Navigation/Agenda/ActivityView.swift | 10 +++---- .../Navigation/Agenda/EventListView.swift | 2 +- .../Views/Tournament/FileImportView.swift | 28 ++++++++----------- .../Screen/InscriptionManagerView.swift | 19 +++++++------ 9 files changed, 41 insertions(+), 39 deletions(-) diff --git a/PadelClub.xcodeproj/project.pbxproj b/PadelClub.xcodeproj/project.pbxproj index 368ae13..2eae591 100644 --- a/PadelClub.xcodeproj/project.pbxproj +++ b/PadelClub.xcodeproj/project.pbxproj @@ -1939,7 +1939,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 35; + CURRENT_PROJECT_VERSION = 36; DEFINES_MODULE = YES; DEVELOPMENT_ASSET_PATHS = "\"PadelClub/Preview Content\""; DEVELOPMENT_TEAM = BQ3Y44M3Q6; @@ -1977,7 +1977,7 @@ ASSETCATALOG_COMPILER_APPICON_NAME = AppIcon; ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 35; + CURRENT_PROJECT_VERSION = 36; DEFINES_MODULE = YES; DEVELOPMENT_ASSET_PATHS = "\"PadelClub/Preview Content\""; DEVELOPMENT_TEAM = BQ3Y44M3Q6; diff --git a/PadelClub/Data/User.swift b/PadelClub/Data/User.swift index 332fcd4..29de3e6 100644 --- a/PadelClub/Data/User.swift +++ b/PadelClub/Data/User.swift @@ -73,8 +73,8 @@ class User: ModelObject, UserBase, Storable { return "Sportivement,\n\(firstName) \(lastName), votre JAP." } - func hasClubs() -> Bool { - self.clubs.isEmpty == false + func hasTenupClubs() -> Bool { + self.clubsObjects().filter({ $0.code != nil }).isEmpty == false } func hasFavoriteClubsAndCreatedClubs() -> Bool { diff --git a/PadelClub/Extensions/String+Extensions.swift b/PadelClub/Extensions/String+Extensions.swift index 0398619..580830e 100644 --- a/PadelClub/Extensions/String+Extensions.swift +++ b/PadelClub/Extensions/String+Extensions.swift @@ -46,16 +46,18 @@ extension String { func acronym() -> String { let acronym = canonicalVersion.replaceCharactersFromSet(characterSet: .whitespacesAndNewlines) if acronym.count > 10 { - return concatenateFirstLetters() + return concatenateFirstLetters().uppercased() } else { - return acronym + return acronym.uppercased() } } func concatenateFirstLetters() -> String { // Split the input into sentences let sentences = self.components(separatedBy: .whitespacesAndNewlines) - + if sentences.count == 1 { + return String(self.prefix(10)) + } // Extract the first character of each sentence let firstLetters = sentences.compactMap { sentence -> Character? in let trimmedSentence = sentence.trimmingCharacters(in: .whitespacesAndNewlines) diff --git a/PadelClub/Views/Club/ClubDetailView.swift b/PadelClub/Views/Club/ClubDetailView.swift index 62572df..62081e7 100644 --- a/PadelClub/Views/Club/ClubDetailView.swift +++ b/PadelClub/Views/Club/ClubDetailView.swift @@ -59,7 +59,7 @@ struct ClubDetailView: View { .submitLabel( displayContext == .addition ? .next : .done) .onSubmit(of: .text) { if club.acronym.isEmpty { - club.acronym = club.name.canonicalVersion.replaceCharactersFromSet(characterSet: .whitespacesAndNewlines) + club.acronym = club.name.canonicalVersion.replaceCharactersFromSet(characterSet: .whitespacesAndNewlines).acronym() } if displayContext == .edition && city.isEmpty == true { diff --git a/PadelClub/Views/Club/ClubRowView.swift b/PadelClub/Views/Club/ClubRowView.swift index 3a3e2dc..0f7f2fd 100644 --- a/PadelClub/Views/Club/ClubRowView.swift +++ b/PadelClub/Views/Club/ClubRowView.swift @@ -13,13 +13,14 @@ struct ClubRowView: View { var body: some View { LabeledContent { + Text(club.acronym) // if displayContext == .edition { // Image(systemName: club.isFavorite() ? "star.fill" : "star") // .foregroundStyle(club.isFavorite() ? .green : .logoRed) // } } label: { + Text("Club") Text(club.name) - Text(club.acronym) } } } diff --git a/PadelClub/Views/Navigation/Agenda/ActivityView.swift b/PadelClub/Views/Navigation/Agenda/ActivityView.swift index f1e080b..bcbeaf3 100644 --- a/PadelClub/Views/Navigation/Agenda/ActivityView.swift +++ b/PadelClub/Views/Navigation/Agenda/ActivityView.swift @@ -121,14 +121,14 @@ struct ActivityView: View { } .task { if navigation.agendaDestination == .tenup - && dataStore.user.hasClubs() == true + && dataStore.user.hasTenupClubs() == true && federalDataViewModel.federalTournaments.isEmpty { _gatherFederalTournaments() } } .onChange(of: navigation.agendaDestination) { if navigation.agendaDestination == .tenup - && dataStore.user.hasClubs() == true + && dataStore.user.hasTenupClubs() == true && federalDataViewModel.federalTournaments.isEmpty { _gatherFederalTournaments() } @@ -192,7 +192,7 @@ struct ActivityView: View { .tint(.master) } .sheet(isPresented: $presentClubSearchView, onDismiss: { - if dataStore.user.hasClubs() == true { + if dataStore.user.hasTenupClubs() == true { federalDataViewModel.federalTournaments.removeAll() navigation.agendaDestination = .tenup } @@ -247,7 +247,7 @@ struct ActivityView: View { RowButtonView("Créer un nouvel événement") { newTournament = Tournament.newEmptyInstance() } - if dataStore.user.hasClubs() == false { + if dataStore.user.hasTenupClubs() == false { RowButtonView("Chercher l'un de vos clubs") { presentClubSearchView = true } @@ -268,7 +268,7 @@ struct ActivityView: View { } private func _tenupEmptyView() -> some View { - if dataStore.user.hasClubs() == false { + if dataStore.user.hasTenupClubs() == false { ContentUnavailableView { Label("Aucun tournoi", systemImage: "shield.slash") } description: { diff --git a/PadelClub/Views/Navigation/Agenda/EventListView.swift b/PadelClub/Views/Navigation/Agenda/EventListView.swift index 7cfcb48..7adadb5 100644 --- a/PadelClub/Views/Navigation/Agenda/EventListView.swift +++ b/PadelClub/Views/Navigation/Agenda/EventListView.swift @@ -53,7 +53,7 @@ struct EventListView: View { .headerProminence(.increased) .task { if navigation.agendaDestination == .tenup - && dataStore.user.hasClubs() == true + && dataStore.user.hasTenupClubs() == true && _tournaments.isEmpty { _gatherFederalTournaments(startDate: section) } diff --git a/PadelClub/Views/Tournament/FileImportView.swift b/PadelClub/Views/Tournament/FileImportView.swift index 5eb7799..87cafe6 100644 --- a/PadelClub/Views/Tournament/FileImportView.swift +++ b/PadelClub/Views/Tournament/FileImportView.swift @@ -104,17 +104,7 @@ struct FileImportView: View { } } } - - if validationInProgress { - Section { - LabeledContent { - ProgressView() - } label: { - Text("Mise à jour des équipes") - } - } - } - + if let errorMessage { Section { Text(errorMessage) @@ -157,7 +147,7 @@ struct FileImportView: View { Section { ContentUnavailableView("Aucune équipe détectée", systemImage: "person.2.slash") } - } else if didImport && validationInProgress == false { + } else if didImport { let _filteredTeams = filteredTeams let previousTeams = tournament.sortedTeams() @@ -232,18 +222,24 @@ struct FileImportView: View { } ToolbarItem(placement: .topBarTrailing) { - ButtonValidateView { - _validate() + if validationInProgress { + ProgressView() + } else { + ButtonValidateView { + validationInProgress = true + } + .disabled(teams.isEmpty) } - .disabled(teams.isEmpty) } } .interactiveDismissDisabled(validationInProgress) .disabled(validationInProgress) + .onChange(of: validationInProgress) { + _validate() + } } private func _validate() { - validationInProgress = true Task { let previousTeams = filteredTeams.compactMap({ $0.previousTeam }) diff --git a/PadelClub/Views/Tournament/Screen/InscriptionManagerView.swift b/PadelClub/Views/Tournament/Screen/InscriptionManagerView.swift index d5b27a8..dbaa21b 100644 --- a/PadelClub/Views/Tournament/Screen/InscriptionManagerView.swift +++ b/PadelClub/Views/Tournament/Screen/InscriptionManagerView.swift @@ -152,14 +152,15 @@ struct InscriptionManagerView: View { } private func _handleHashDiff() async { - let newHash = _simpleHash(ids: tournament.selectedSortedTeams().map { $0.id }) - if let teamsHash, newHash != teamsHash { + let selectedSortedTeams = tournament.selectedSortedTeams() + let newHash = _simpleHash(ids: selectedSortedTeams.map { $0.id }) + if (self.teamsHash != nil && newHash != teamsHash!) || (self.teamsHash == nil && selectedSortedTeams.isEmpty == false) { self.teamsHash = newHash if self.tournament.shouldVerifyBracket == false || self.tournament.shouldVerifyGroupStage == false { self.tournament.shouldVerifyBracket = true self.tournament.shouldVerifyGroupStage = true - let waitingList = self.tournament.waitingListTeams(in: self.tournament.selectedSortedTeams()) + let waitingList = self.tournament.waitingListTeams(in: selectedSortedTeams) waitingList.forEach { team in if team.bracketPosition != nil || team.groupStagePosition != nil { team.resetPositions() @@ -181,10 +182,9 @@ struct InscriptionManagerView: View { _managementView() if _isEditingTeam() { _buildingTeamView() - } else if tournament.unsortedTeams().isEmpty { + } else if unfilteredTeams.isEmpty { _inscriptionTipsView() - } - if _isEditingTeam() == false { + } else { _teamRegisteredView() } } @@ -284,7 +284,9 @@ struct InscriptionManagerView: View { } .tint(.master) } - .sheet(isPresented: $presentImportView) { + .sheet(isPresented: $presentImportView, onDismiss: { + _getTeams() + }) { NavigationStack { FileImportView() } @@ -428,12 +430,13 @@ struct InscriptionManagerView: View { } private func _prepareTeams() { + #if DEBUG_TIME let start = Date() defer { let duration = Duration.milliseconds(Date().timeIntervalSince(start) * 1_000) print("func _prepareTeams", duration.formatted(.units(allowed: [.seconds, .milliseconds]))) } - + #endif sortedTeams = tournament.sortedTeams() var teams = sortedTeams