multistore
Laurent 2 years ago
commit 85a1239cb4
  1. 29
      PadelClub/Views/GroupStage/Shared/GroupStageTeamReplacementView.swift
  2. 15
      PadelClub/Views/Navigation/Agenda/ActivityView.swift
  3. 62
      PadelClub/Views/Navigation/Umpire/UmpireView.swift
  4. 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")
}
}

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

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

@ -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