fix search view model

multistore
Raz 2 years ago
parent 41823ec896
commit 03aa70e989
  1. 29
      PadelClub/Views/GroupStage/Shared/GroupStageTeamReplacementView.swift
  2. 44
      PadelClub/Views/Navigation/Umpire/UmpireView.swift
  3. 3
      PadelClub/Views/Shared/SelectablePlayerListView.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<Bool> {
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")
}
}

@ -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
}
@ -56,25 +58,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: {
@ -161,6 +146,27 @@ struct UmpireView: View {
// }
}
.navigationTitle("Juge-Arbitre")
.sheet(isPresented: $presentSearchView) {
if 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)
}
}
}
})
}
}
}
}
}
}

@ -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()
}

Loading…
Cancel
Save