diff --git a/PadelClub/Views/Shared/SelectablePlayerListView.swift b/PadelClub/Views/Shared/SelectablePlayerListView.swift index 352251d..c5e7f4e 100644 --- a/PadelClub/Views/Shared/SelectablePlayerListView.swift +++ b/PadelClub/Views/Shared/SelectablePlayerListView.swift @@ -489,103 +489,7 @@ struct MySearchView: View { } else { Section { ForEach(players, id: \.self) { player in - let index : Int? = nil - - VStack(alignment: .leading) { - HStack { - if player.isAnonymous() { - Text("Joueur Anonyme") - } else { - Text(player.getLastName().capitalized) - Text(player.getFirstName().capitalized) - } - if index == nil { - Text(player.male ? "♂︎" : "♀︎") - } - Spacer() - if let index { - HStack(alignment: .top, spacing: 0) { - Text(index.formatted()) - .foregroundStyle(.secondary) - .font(.title3) - Text(index.ordinalFormattedSuffix()) - .foregroundStyle(.secondary) - .font(.caption) - } - } - } - .font(.title3) - .lineLimit(1) - HStack { - HStack(alignment: .top, spacing: 0) { - Text(player.formattedRank()).italic(player.isAssimilated) - .font(.title3) - .background { - if player.isNotFromCurrentDate() { - UnderlineView() - } - } - if let rank = player.getRank() { - Text(rank.ordinalFormattedSuffix()).italic(player.isAssimilated) - .font(.caption) - } - } - - if showProgression, player.getProgression() != 0 { - HStack(alignment: .top, spacing: 2) { - Text("(") - Text(player.getProgression().formatted(.number.sign(strategy: .always()))) - .foregroundStyle(player.getProgressionColor(progression: player.getProgression())) - Text(")") - }.font(.title3) - } - - if let pts = player.getPoints(), pts > 0 { - HStack(alignment: .lastTextBaseline, spacing: 0) { - Text(pts.formatted()).font(.title3) - Text(" pts").font(.caption) - } - } - - if let tournamentPlayed = player.tournamentPlayed, tournamentPlayed > 0 { - HStack(alignment: .lastTextBaseline, spacing: 0) { - Text(tournamentPlayed.formatted()).font(.title3) - Text(" tournoi" + tournamentPlayed.pluralSuffix).font(.caption) - } - } - } - .lineLimit(1) - .truncationMode(.tail) - - if showFemaleInMaleAssimilation, let assimilatedAsMaleRank = player.getAssimilatedAsMaleRank() { - HStack(alignment: .top, spacing: 2) { - Text("(") - Text(assimilatedAsMaleRank.formatted()) - VStack(alignment: .leading, spacing: 0) { - Text("équivalence") - Text("messieurs") - } - .font(.caption) - Text(")").font(.title3) - } - } - - HStack { - Text(player.formattedLicense()) - if let computedAge = player.computedAge { - Text(computedAge.formatted() + " ans") - } - } - .font(.caption) - if let clubName = player.clubName { - Text(clubName) - .font(.caption) - } - if let ligueName = player.ligueName { - Text(ligueName) - .font(.caption) - } - } + ImportedPlayerView(player: player, index: nil, showFemaleInMaleAssimilation: searchViewModel.showFemaleInMaleAssimilation, showProgression: true) } } header: { if players.isEmpty == false { @@ -601,106 +505,10 @@ struct MySearchView: View { if searchViewModel.allowSingleSelection { Section { ForEach(players) { player in - let index : Int? = nil - Button { searchViewModel.selectedPlayers.insert(player) } label: { - VStack(alignment: .leading) { - HStack { - if player.isAnonymous() { - Text("Joueur Anonyme") - } else { - Text(player.getLastName().capitalized) - Text(player.getFirstName().capitalized) - } - if index == nil { - Text(player.male ? "♂︎" : "♀︎") - } - Spacer() - if let index { - HStack(alignment: .top, spacing: 0) { - Text(index.formatted()) - .foregroundStyle(.secondary) - .font(.title3) - Text(index.ordinalFormattedSuffix()) - .foregroundStyle(.secondary) - .font(.caption) - } - } - } - .font(.title3) - .lineLimit(1) - HStack { - HStack(alignment: .top, spacing: 0) { - Text(player.formattedRank()).italic(player.isAssimilated) - .font(.title3) - .background { - if player.isNotFromCurrentDate() { - UnderlineView() - } - } - if let rank = player.getRank() { - Text(rank.ordinalFormattedSuffix()).italic(player.isAssimilated) - .font(.caption) - } - } - - if showProgression, player.getProgression() != 0 { - HStack(alignment: .top, spacing: 2) { - Text("(") - Text(player.getProgression().formatted(.number.sign(strategy: .always()))) - .foregroundStyle(player.getProgressionColor(progression: player.getProgression())) - Text(")") - }.font(.title3) - } - - if let pts = player.getPoints(), pts > 0 { - HStack(alignment: .lastTextBaseline, spacing: 0) { - Text(pts.formatted()).font(.title3) - Text(" pts").font(.caption) - } - } - - if let tournamentPlayed = player.tournamentPlayed, tournamentPlayed > 0 { - HStack(alignment: .lastTextBaseline, spacing: 0) { - Text(tournamentPlayed.formatted()).font(.title3) - Text(" tournoi" + tournamentPlayed.pluralSuffix).font(.caption) - } - } - } - .lineLimit(1) - .truncationMode(.tail) - - if showFemaleInMaleAssimilation, let assimilatedAsMaleRank = player.getAssimilatedAsMaleRank() { - HStack(alignment: .top, spacing: 2) { - Text("(") - Text(assimilatedAsMaleRank.formatted()) - VStack(alignment: .leading, spacing: 0) { - Text("équivalence") - Text("messieurs") - } - .font(.caption) - Text(")").font(.title3) - } - } - - HStack { - Text(player.formattedLicense()) - if let computedAge = player.computedAge { - Text(computedAge.formatted() + " ans") - } - } - .font(.caption) - if let clubName = player.clubName { - Text(clubName) - .font(.caption) - } - if let ligueName = player.ligueName { - Text(ligueName) - .font(.caption) - } - } + ImportedPlayerView(player: player, showFemaleInMaleAssimilation: searchViewModel.showFemaleInMaleAssimilation, showProgression: true) } .buttonStyle(.plain) } @@ -712,105 +520,9 @@ struct MySearchView: View { .id(UUID()) } else { Section { - ForEach(players.indices, id: \.self) { playerIndex in - let player = players[playerIndex] - let index: Int? = searchViewModel.showIndex() ? (playerIndex + 1) : nil - - VStack(alignment: .leading) { - HStack { - if player.isAnonymous() { - Text("Joueur Anonyme") - } else { - Text(player.getLastName().capitalized) - Text(player.getFirstName().capitalized) - } - if index == nil { - Text(player.male ? "♂︎" : "♀︎") - } - Spacer() - if let index { - HStack(alignment: .top, spacing: 0) { - Text(index.formatted()) - .foregroundStyle(.secondary) - .font(.title3) - Text(index.ordinalFormattedSuffix()) - .foregroundStyle(.secondary) - .font(.caption) - } - } - } - .font(.title3) - .lineLimit(1) - HStack { - HStack(alignment: .top, spacing: 0) { - Text(player.formattedRank()).italic(player.isAssimilated) - .font(.title3) - .background { - if player.isNotFromCurrentDate() { - UnderlineView() - } - } - if let rank = player.getRank() { - Text(rank.ordinalFormattedSuffix()).italic(player.isAssimilated) - .font(.caption) - } - } - - if showProgression, player.getProgression() != 0 { - HStack(alignment: .top, spacing: 2) { - Text("(") - Text(player.getProgression().formatted(.number.sign(strategy: .always()))) - .foregroundStyle(player.getProgressionColor(progression: player.getProgression())) - Text(")") - }.font(.title3) - } - - if let pts = player.getPoints(), pts > 0 { - HStack(alignment: .lastTextBaseline, spacing: 0) { - Text(pts.formatted()).font(.title3) - Text(" pts").font(.caption) - } - } - - if let tournamentPlayed = player.tournamentPlayed, tournamentPlayed > 0 { - HStack(alignment: .lastTextBaseline, spacing: 0) { - Text(tournamentPlayed.formatted()).font(.title3) - Text(" tournoi" + tournamentPlayed.pluralSuffix).font(.caption) - } - } - } - .lineLimit(1) - .truncationMode(.tail) - - if showFemaleInMaleAssimilation, let assimilatedAsMaleRank = player.getAssimilatedAsMaleRank() { - HStack(alignment: .top, spacing: 2) { - Text("(") - Text(assimilatedAsMaleRank.formatted()) - VStack(alignment: .leading, spacing: 0) { - Text("équivalence") - Text("messieurs") - } - .font(.caption) - Text(")").font(.title3) - } - } - - HStack { - Text(player.formattedLicense()) - if let computedAge = player.computedAge { - Text(computedAge.formatted() + " ans") - } - } - .font(.caption) - if let clubName = player.clubName { - Text(clubName) - .font(.caption) - } - if let ligueName = player.ligueName { - Text(ligueName) - .font(.caption) - } - } + ForEach(players.indices, id: \.self) { index in + let player = players[index] + ImportedPlayerView(player: player, index: searchViewModel.showIndex() ? (index + 1) : nil, showFemaleInMaleAssimilation: searchViewModel.showFemaleInMaleAssimilation, showProgression: true) } } header: { if players.isEmpty == false { @@ -821,207 +533,19 @@ struct MySearchView: View { } } else { Section { - ForEach(players.indices, id: \.self) { playerIndex in - let player = players[playerIndex] - let index: Int? = searchViewModel.showIndex() ? (playerIndex + 1) : nil + ForEach(players.indices, id: \.self) { index in + let player = players[index] if searchViewModel.allowSingleSelection { Button { searchViewModel.selectedPlayers.insert(player) } label: { - VStack(alignment: .leading) { - HStack { - if player.isAnonymous() { - Text("Joueur Anonyme") - } else { - Text(player.getLastName().capitalized) - Text(player.getFirstName().capitalized) - } - if index == nil { - Text(player.male ? "♂︎" : "♀︎") - } - Spacer() - if let index { - HStack(alignment: .top, spacing: 0) { - Text(index.formatted()) - .foregroundStyle(.secondary) - .font(.title3) - Text(index.ordinalFormattedSuffix()) - .foregroundStyle(.secondary) - .font(.caption) - } - } - } - .font(.title3) - .lineLimit(1) - HStack { - HStack(alignment: .top, spacing: 0) { - Text(player.formattedRank()).italic(player.isAssimilated) - .font(.title3) - .background { - if player.isNotFromCurrentDate() { - UnderlineView() - } - } - if let rank = player.getRank() { - Text(rank.ordinalFormattedSuffix()).italic(player.isAssimilated) - .font(.caption) - } - } - - if showProgression, player.getProgression() != 0 { - HStack(alignment: .top, spacing: 2) { - Text("(") - Text(player.getProgression().formatted(.number.sign(strategy: .always()))) - .foregroundStyle(player.getProgressionColor(progression: player.getProgression())) - Text(")") - }.font(.title3) - } - - if let pts = player.getPoints(), pts > 0 { - HStack(alignment: .lastTextBaseline, spacing: 0) { - Text(pts.formatted()).font(.title3) - Text(" pts").font(.caption) - } - } - - if let tournamentPlayed = player.tournamentPlayed, tournamentPlayed > 0 { - HStack(alignment: .lastTextBaseline, spacing: 0) { - Text(tournamentPlayed.formatted()).font(.title3) - Text(" tournoi" + tournamentPlayed.pluralSuffix).font(.caption) - } - } - } - .lineLimit(1) - .truncationMode(.tail) - - if showFemaleInMaleAssimilation, let assimilatedAsMaleRank = player.getAssimilatedAsMaleRank() { - HStack(alignment: .top, spacing: 2) { - Text("(") - Text(assimilatedAsMaleRank.formatted()) - VStack(alignment: .leading, spacing: 0) { - Text("équivalence") - Text("messieurs") - } - .font(.caption) - Text(")").font(.title3) - } - } - - HStack { - Text(player.formattedLicense()) - if let computedAge = player.computedAge { - Text(computedAge.formatted() + " ans") - } - } - .font(.caption) - if let clubName = player.clubName { - Text(clubName) - .font(.caption) - } - if let ligueName = player.ligueName { - Text(ligueName) - .font(.caption) - } - } + ImportedPlayerView(player: player, index: searchViewModel.showIndex() ? (index + 1) : nil, showFemaleInMaleAssimilation: searchViewModel.showFemaleInMaleAssimilation, showProgression: true) + .contentShape(Rectangle()) } .frame(maxWidth: .infinity) .buttonStyle(.plain) } else { - VStack(alignment: .leading) { - HStack { - if player.isAnonymous() { - Text("Joueur Anonyme") - } else { - Text(player.getLastName().capitalized) - Text(player.getFirstName().capitalized) - } - if index == nil { - Text(player.male ? "♂︎" : "♀︎") - } - Spacer() - if let index { - HStack(alignment: .top, spacing: 0) { - Text(index.formatted()) - .foregroundStyle(.secondary) - .font(.title3) - Text(index.ordinalFormattedSuffix()) - .foregroundStyle(.secondary) - .font(.caption) - } - } - } - .font(.title3) - .lineLimit(1) - HStack { - HStack(alignment: .top, spacing: 0) { - Text(player.formattedRank()).italic(player.isAssimilated) - .font(.title3) - .background { - if player.isNotFromCurrentDate() { - UnderlineView() - } - } - if let rank = player.getRank() { - Text(rank.ordinalFormattedSuffix()).italic(player.isAssimilated) - .font(.caption) - } - } - - if showProgression, player.getProgression() != 0 { - HStack(alignment: .top, spacing: 2) { - Text("(") - Text(player.getProgression().formatted(.number.sign(strategy: .always()))) - .foregroundStyle(player.getProgressionColor(progression: player.getProgression())) - Text(")") - }.font(.title3) - } - - if let pts = player.getPoints(), pts > 0 { - HStack(alignment: .lastTextBaseline, spacing: 0) { - Text(pts.formatted()).font(.title3) - Text(" pts").font(.caption) - } - } - - if let tournamentPlayed = player.tournamentPlayed, tournamentPlayed > 0 { - HStack(alignment: .lastTextBaseline, spacing: 0) { - Text(tournamentPlayed.formatted()).font(.title3) - Text(" tournoi" + tournamentPlayed.pluralSuffix).font(.caption) - } - } - } - .lineLimit(1) - .truncationMode(.tail) - - if showFemaleInMaleAssimilation, let assimilatedAsMaleRank = player.getAssimilatedAsMaleRank() { - HStack(alignment: .top, spacing: 2) { - Text("(") - Text(assimilatedAsMaleRank.formatted()) - VStack(alignment: .leading, spacing: 0) { - Text("équivalence") - Text("messieurs") - } - .font(.caption) - Text(")").font(.title3) - } - } - - HStack { - Text(player.formattedLicense()) - if let computedAge = player.computedAge { - Text(computedAge.formatted() + " ans") - } - } - .font(.caption) - if let clubName = player.clubName { - Text(clubName) - .font(.caption) - } - if let ligueName = player.ligueName { - Text(ligueName) - .font(.caption) - } - } + ImportedPlayerView(player: player, index: searchViewModel.showIndex() ? (index + 1) : nil, showFemaleInMaleAssimilation: searchViewModel.showFemaleInMaleAssimilation, showProgression: true) } } } header: {