diff --git a/PadelClub/Views/GroupStage/Shared/GroupStageTeamReplacementView.swift b/PadelClub/Views/GroupStage/Shared/GroupStageTeamReplacementView.swift index e37e36b..c4510ea 100644 --- a/PadelClub/Views/GroupStage/Shared/GroupStageTeamReplacementView.swift +++ b/PadelClub/Views/GroupStage/Shared/GroupStageTeamReplacementView.swift @@ -12,7 +12,19 @@ struct GroupStageTeamReplacementView: View { let teamRange: TeamRegistration.TeamRange? let teamRangeExtended: TeamRegistration.TeamRange? @State private var selectedPlayer: PlayerRegistration? + @State private var selectedRange: TeamRegistration.TeamRange? + var presentSearchView: Binding { + Binding { + selectedRange != nil + } set: { newValue in + if newValue == false { + selectedRange = nil + } + } + } + + init(team: TeamRegistration) { self.team = team self.teamRange = team.replacementRange() @@ -68,7 +80,9 @@ struct GroupStageTeamReplacementView: View { Section { TeamRangeView(teamRange: teamRange, playerWeight: _getWeight()) if selectedPlayer != nil { - _searchLinkView(teamRange) + RowButtonView("Chercher dans vos clubs favoris") { + selectedRange = teamRange + } } } header: { Text("Même position en poule") @@ -80,7 +94,9 @@ struct GroupStageTeamReplacementView: View { Section { TeamRangeView(teamRange: teamRangeExtended, playerWeight: _getWeight()) if selectedPlayer != nil { - _searchLinkView(teamRangeExtended) + RowButtonView("Chercher dans vos clubs favoris") { + selectedRange = teamRangeExtended + } } } header: { Text("Même ligne en poule") @@ -93,14 +109,17 @@ struct GroupStageTeamReplacementView: View { .navigationTitle("Remplacement") .navigationBarTitleDisplayMode(.inline) .toolbarBackground(.visible, for: .navigationBar) + .sheet(isPresented: presentSearchView) { + if let selectedRange { + _searchLinkView(selectedRange) + } + } } private func _searchLinkView(_ teamRange: TeamRegistration.TeamRange) -> some View { - NavigationLink { + NavigationStack { let tournament = team.tournamentObject() SelectablePlayerListView(searchField: _searchableRange(teamRange), dataSet: .favoriteClubs, filterOption: tournament?.tournamentCategory.playerFilterOption ?? .all, sortOption: .rank, showFemaleInMaleAssimilation: true, tokens: [_searchToken(teamRange)], hidePlayers: tournament?.selectedPlayers().compactMap { $0.licenceId }) - } label: { - Text("Chercher dans vos clubs favoris") } } diff --git a/PadelClub/Views/Navigation/Agenda/ActivityView.swift b/PadelClub/Views/Navigation/Agenda/ActivityView.swift index 3541dff..7ef6d10 100644 --- a/PadelClub/Views/Navigation/Agenda/ActivityView.swift +++ b/PadelClub/Views/Navigation/Agenda/ActivityView.swift @@ -113,13 +113,13 @@ struct ActivityView: View { .environment(navigation) .tint(.master) } -// .refreshable { -// if navigation.agendaDestination == .tenup { -// federalDataViewModel.federalTournaments.removeAll() -// NetworkFederalService.shared.formId = "" -// _gatherFederalTournaments() -// } -// } + .refreshable { + if navigation.agendaDestination == .tenup { + federalDataViewModel.federalTournaments.removeAll() + NetworkFederalService.shared.formId = "" + _gatherFederalTournaments() + } + } .task { if navigation.agendaDestination == .tenup && dataStore.user.hasClubs() == true @@ -204,6 +204,7 @@ struct ActivityView: View { } .sheet(isPresented: $presentClubSearchView, onDismiss: { if dataStore.user.hasClubs() == true { + federalDataViewModel.federalTournaments.removeAll() navigation.agendaDestination = .tenup } }) { diff --git a/PadelClub/Views/Navigation/Umpire/UmpireView.swift b/PadelClub/Views/Navigation/Umpire/UmpireView.swift index afc9966..8ae51ae 100644 --- a/PadelClub/Views/Navigation/Umpire/UmpireView.swift +++ b/PadelClub/Views/Navigation/Umpire/UmpireView.swift @@ -12,6 +12,8 @@ import LeStorage struct UmpireView: View { @Environment(NavigationViewModel.self) private var navigation: NavigationViewModel @EnvironmentObject var dataStore: DataStore + @State private var presentSearchView: Bool = false + var lastDataSource: String? { dataStore.appSettings.lastDataSource } @@ -46,8 +48,7 @@ struct UmpireView: View { Label("Mon compte", systemImage: "person.circle.fill") } - let user = dataStore.user - let currentPlayerData = user.currentPlayerData() + let currentPlayerData = dataStore.user.currentPlayerData() Section { if let currentPlayerData { NavigationLink { @@ -56,25 +57,8 @@ struct UmpireView: View { ImportedPlayerView(player: currentPlayerData) } } else { - NavigationLink { - 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) - do { - try dataStore.clubs.addOrUpdate(instance: userClub) - user.setUserClub(userClub) - try dataStore.userStorage.update() - } catch { - Logger.error(error) - } - } - } - }) - .id(UUID()) - } label: { - Label("Ma fiche joueur", systemImage: "person.bust.circle.fill") + RowButtonView("Ma fiche joueur", systemImage: "person.bust.circle.fill") { + presentSearchView = true } } } header: { @@ -82,11 +66,11 @@ struct UmpireView: View { Text("Ma fiche joueur") } } footer: { - if user.licenceId == nil { + if dataStore.user.licenceId == nil { Text("Si vous avez participé à un tournoi dans les 12 derniers mois, Padel Club peut vous retrouver.") } else { Button("supprimer", role: .destructive) { - user.licenceId = nil + dataStore.user.licenceId = nil do { try dataStore.userStorage.update() } catch { @@ -141,19 +125,19 @@ struct UmpireView: View { // Section { // Text("Tenup ID") // } -// +// // Section { // Text("Tournois") // } -// +// // Section { // NavigationLink { -// +// // } label: { // Text("Favori") // } // NavigationLink { -// +// // } label: { // Text("Black list") // } @@ -161,7 +145,7 @@ struct UmpireView: View { } .navigationTitle("Juge-Arbitre") .toolbar { - #if DEBUG +#if DEBUG ToolbarItem(placement: .topBarTrailing) { if Store.main.collectionsCanSynchronize { Image(systemName: "checkmark.icloud") @@ -169,7 +153,27 @@ struct UmpireView: View { Image(systemName: "icloud.slash") } } - #endif +#endif + } + .sheet(isPresented: $presentSearchView) { + let user = dataStore.user + 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) + do { + try dataStore.clubs.addOrUpdate(instance: userClub) + user.setUserClub(userClub) + try dataStore.userStorage.update() + } catch { + Logger.error(error) + } + } + } + }) + } } } } diff --git a/PadelClub/Views/Shared/SelectablePlayerListView.swift b/PadelClub/Views/Shared/SelectablePlayerListView.swift index 149057b..402cadf 100644 --- a/PadelClub/Views/Shared/SelectablePlayerListView.swift +++ b/PadelClub/Views/Shared/SelectablePlayerListView.swift @@ -38,6 +38,7 @@ struct SelectablePlayerListView: View { self.allowSelection = allowSelection self.playerSelectionAction = playerSelectionAction self.contentUnavailableAction = contentUnavailableAction + self.searchText = searchField ?? "" let searchViewModel = SearchViewModel() searchViewModel.tokens = tokens searchViewModel.searchText = searchField ?? "" @@ -127,7 +128,7 @@ struct SelectablePlayerListView: View { } .onAppear { searchViewModel.mostRecentDate = mostRecentDate - if searchViewModel.tokens.isEmpty { + if searchViewModel.tokens.isEmpty && searchText.isEmpty { searchViewModel.debouncableText.removeAll() searchViewModel.searchText.removeAll() }