diff --git a/PadelClub/Data/Federal/FederalTournament.swift b/PadelClub/Data/Federal/FederalTournament.swift index 0a473ee..db6f32c 100644 --- a/PadelClub/Data/Federal/FederalTournament.swift +++ b/PadelClub/Data/Federal/FederalTournament.swift @@ -27,6 +27,14 @@ struct FederalTournament: Identifiable, Codable { Logger.error(error) } } + if let club, club.creator == nil { + club.creator = StoreCenter.main.userId + do { + try DataStore.shared.clubs.addOrUpdate(instance: club) + } catch { + Logger.error(error) + } + } return event! } diff --git a/PadelClub/Views/Cashier/Event/EventCreationView.swift b/PadelClub/Views/Cashier/Event/EventCreationView.swift index 913862f..f87a178 100644 --- a/PadelClub/Views/Cashier/Event/EventCreationView.swift +++ b/PadelClub/Views/Cashier/Event/EventCreationView.swift @@ -131,7 +131,15 @@ struct EventCreationView: View { private func _validate() { let event = Event(creator: StoreCenter.main.userId, name: eventName) event.club = selectedClub?.id - + if let selectedClub, selectedClub.creator == nil { + selectedClub.creator = StoreCenter.main.userId + do { + try dataStore.clubs.addOrUpdate(instance: selectedClub) + } catch { + Logger.error(error) + } + } + do { try dataStore.events.addOrUpdate(instance: event) } catch { diff --git a/PadelClub/Views/Club/ClubSearchView.swift b/PadelClub/Views/Club/ClubSearchView.swift index cc22c46..6601558 100644 --- a/PadelClub/Views/Club/ClubSearchView.swift +++ b/PadelClub/Views/Club/ClubSearchView.swift @@ -28,6 +28,7 @@ struct ClubSearchView: View { @State private var showingSettingsAlert = false @State private var newClub: Club? @State private var error: Error? + @State private var selectedClubId: String? var presentClubCreationView: Binding { Binding( get: { newClub != nil }, @@ -90,8 +91,18 @@ struct ClubSearchView: View { Section { ForEach(_filteredClubs()) { clubMark in Button { - let clubToEdit = club ?? Club.findOrCreate(name: clubMark.nom, code: clubMark.clubID) - _importClub(clubToEdit: clubToEdit, clubMarker: clubMark) + Task { + selectedClubId = clubMark.id + do { + dataStore.clubs.reset() + try await dataStore.clubs.loadDataFromServerIfAllowed() + } catch { + Logger.error(error) + } + let clubToEdit = club ?? Club.findOrCreate(name: clubMark.nom, code: clubMark.clubID) + _importClub(clubToEdit: clubToEdit, clubMarker: clubMark) + selectedClubId = nil + } } label: { clubView(clubMark) .contentShape(Rectangle()) @@ -118,13 +129,6 @@ struct ClubSearchView: View { } } } - .task { - do { - try await dataStore.clubs.loadDataFromServerIfAllowed() - } catch { - Logger.error(error) - } - } .listStyle(.grouped) .onChange(of: searchPresented) { locationManager.lastError = nil @@ -386,7 +390,11 @@ struct ClubSearchView: View { @ViewBuilder private func clubView(_ club: ClubMarker) -> some View { LabeledContent { - Text(club.distance(from: locationManager.location)) + if club.id == selectedClubId { + ProgressView() + } else { + Text(club.distance(from: locationManager.location)) + } } label: { Text(club.nom) Text(club.ville).font(.caption) diff --git a/PadelClub/Views/Club/CreateClubView.swift b/PadelClub/Views/Club/CreateClubView.swift index 6faef6d..5f21ece 100644 --- a/PadelClub/Views/Club/CreateClubView.swift +++ b/PadelClub/Views/Club/CreateClubView.swift @@ -44,6 +44,7 @@ struct CreateClubView: View { if validationInProgress { Task { do { + dataStore.clubs.reset() try await dataStore.clubs.loadDataFromServerIfAllowed() } catch { Logger.error(error) diff --git a/PadelClub/Views/Navigation/MainView.swift b/PadelClub/Views/Navigation/MainView.swift index 19e1fc2..ae27fa7 100644 --- a/PadelClub/Views/Navigation/MainView.swift +++ b/PadelClub/Views/Navigation/MainView.swift @@ -94,6 +94,7 @@ struct MainView: View { //await self._checkSourceFileAvailability() if StoreCenter.main.hasToken() { do { + dataStore.clubs.reset() try await dataStore.clubs.loadDataFromServerIfAllowed() } catch { Logger.error(error) diff --git a/PadelClub/Views/Navigation/Umpire/UmpireView.swift b/PadelClub/Views/Navigation/Umpire/UmpireView.swift index 945d2d7..b002121 100644 --- a/PadelClub/Views/Navigation/Umpire/UmpireView.swift +++ b/PadelClub/Views/Navigation/Umpire/UmpireView.swift @@ -16,6 +16,7 @@ struct UmpireView: View { @State private var presentSearchView: Bool = false @State private var showSubscriptions: Bool = false + @State private var isImporting: Bool = false // @State var isConnected: Bool = false @@ -54,17 +55,25 @@ struct UmpireView: View { let currentPlayerData = dataStore.user.currentPlayerData() Section { - if let currentPlayerData { - //todo palmares - ImportedPlayerView(player: currentPlayerData) -// NavigationLink { -// -// } label: { -// ImportedPlayerView(player: currentPlayerData) -// } + if isImporting { + LabeledContent { + ProgressView() + } label: { + Text("Importation de vos données") + } } else { - RowButtonView("Ma fiche joueur", systemImage: "person.bust") { - presentSearchView = true + if let currentPlayerData { + //todo palmares + ImportedPlayerView(player: currentPlayerData) + // NavigationLink { + // + // } label: { + // ImportedPlayerView(player: currentPlayerData) + // } + } else { + RowButtonView("Ma fiche joueur", systemImage: "person.bust") { + presentSearchView = true + } } } } footer: { @@ -166,29 +175,12 @@ struct UmpireView: View { NavigationStack { SelectablePlayerListView(allowSelection: 1, searchField: user.firstName + " " + user.lastName, playerSelectionAction: { players in if let player = players.first { - user.licenceId = player.license - if user.clubsObjects().contains(where: { $0.code == player.clubCode }) == false { - let userClub = Club.findOrCreate(name: player.clubName!, code: player.clubCode) - if userClub.hasBeenCreated(by: StoreCenter.main.userId) { - do { - try dataStore.clubs.addOrUpdate(instance: userClub) - } catch { - Logger.error(error) - } - } - user.setUserClub(userClub) + Task { + await _importUmpireData(fromPlayer: player) } - self.dataStore.saveUser() } }) } - .task { - do { - try await dataStore.clubs.loadDataFromServerIfAllowed() - } catch { - Logger.error(error) - } - } } .navigationDestination(for: UmpireScreen.self) { screen in switch screen { @@ -199,6 +191,31 @@ struct UmpireView: View { } } + private func _importUmpireData(fromPlayer player: ImportedPlayer) async { + isImporting = true + do { + dataStore.clubs.reset() + try await dataStore.clubs.loadDataFromServerIfAllowed() + } catch { + Logger.error(error) + } + let user = dataStore.user + user.licenceId = player.license + if user.clubsObjects().contains(where: { $0.code == player.clubCode }) == false { + let userClub = Club.findOrCreate(name: player.clubName!, code: player.clubCode) + if userClub.hasBeenCreated(by: StoreCenter.main.userId) { + do { + try dataStore.clubs.addOrUpdate(instance: userClub) + } catch { + Logger.error(error) + } + } + user.setUserClub(userClub) + } + self.dataStore.saveUser() + isImporting = false + } + fileprivate func _isConnected() -> Bool { return dataStore.user.username.count > 0 && StoreCenter.main.hasToken() } diff --git a/PadelClub/Views/Tournament/Screen/Components/EventClubSettingsView.swift b/PadelClub/Views/Tournament/Screen/Components/EventClubSettingsView.swift index c1b56e9..746940d 100644 --- a/PadelClub/Views/Tournament/Screen/Components/EventClubSettingsView.swift +++ b/PadelClub/Views/Tournament/Screen/Components/EventClubSettingsView.swift @@ -67,6 +67,16 @@ struct EventClubSettingsView: View { private func _setClub(club: Club) { event.club = club.id + + if club.creator == nil { + club.creator = StoreCenter.main.userId + do { + try dataStore.clubs.addOrUpdate(instance: club) + } catch { + Logger.error(error) + } + } + do { try dataStore.events.addOrUpdate(instance: event) } catch {