You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
DouShouQi_App/DouShouQi_App/DouShouQi_App/Views/Player/PlayersView.swift

120 lines
3.2 KiB

//
// PlayersView.swift
// DouShouQi_App
//
// Created by étudiant on 26/05/2024.
//
import Foundation
import SwiftUI
// Modèle de données pour un joueur
struct Player: Identifiable {
var id = UUID()
var name: String
var wins: Int
var losses: Int
}
// Exemple de vue pour l'interface utilisateur des joueurs
struct PlayersView: View {
// Liste de joueurs pour l'exemple
@State private var players = [
Player(name: "Rayhan", wins: 7, losses: 6),
Player(name: "Remi", wins: 7, losses: 2),
Player(name: "Nathan", wins: 14, losses: 5)
]
@State private var searchText = ""
var filteredPlayers: [Player] {
if searchText.isEmpty {
return players
} else {
return players.filter { $0.name.lowercased().contains(searchText.lowercased()) }
}
}
var body: some View {
NavigationView {
VStack {
// Image en haut
TitlePageFrame(Text: "PLAYERS", ImageWidth: 200, ImageHeight: 200)
// Barre de recherche
SearchBar(text: $searchText)
.padding(.horizontal)
// Liste de joueurs
List {
ForEach(groupedPlayers.keys.sorted(), id: \.self) { key in
Section(header: Text(key)) {
ForEach(groupedPlayers[key]!) { player in
PlayerRow(player: player)
}
}
}
}
Button(action: {
}) {
Text("Add a player")
.font(.headline)
.foregroundColor(.white)
.padding()
.frame(maxWidth: .infinity)
.background(Color.red)
.cornerRadius(10)
.padding(.horizontal)
}
.padding(.bottom)
}
}
}
var groupedPlayers: [String: [Player]] {
Dictionary(grouping: filteredPlayers) { player in
String(player.name.prefix(1)).uppercased()
}
}
}
// Vue pour la barre de recherche
struct SearchBar: UIViewRepresentable {
@Binding var text: String
class Coordinator: NSObject, UISearchBarDelegate {
@Binding var text: String
init(text: Binding<String>) {
_text = text
}
func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
text = searchText
}
}
func makeCoordinator() -> Coordinator {
return Coordinator(text: $text)
}
func makeUIView(context: Context) -> UISearchBar {
let searchBar = UISearchBar(frame: .zero)
searchBar.delegate = context.coordinator
return searchBar
}
func updateUIView(_ uiView: UISearchBar, context: Context) {
uiView.text = text
}
}
struct PlayersPageView_Previews: PreviewProvider {
static var previews: some View {
PlayersView()
}
}