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.
 
 
PadelClub/PadelClub/Views/Team/TeamPickerView.swift

74 lines
2.4 KiB

//
// TeamPickerView.swift
// PadelClub
//
// Created by Razmig Sarkissian on 23/03/2024.
//
import SwiftUI
struct TeamPickerView: View {
@EnvironmentObject var dataStore: DataStore
@Environment(Tournament.self) var tournament: Tournament
@Environment(\.dismiss) private var dismiss
@State private var presentTeamPickerView: Bool = false
@State private var searchField: String = ""
let teamPicked: ((TeamRegistration) -> (Void))
var body: some View {
Button("Choisir") {
presentTeamPickerView = true
}
.sheet(isPresented: $presentTeamPickerView) {
NavigationStack {
List {
let teams = tournament.sortedTeams()
Section {
_teamListView(teams.filter({ $0.availableForSeedPick() }).sorted(by: \.weight).reversed())
} header: {
Text("Disponible")
}
Section {
_teamListView(teams.filter({ $0.inGroupStage() }).sorted(by: \.groupStagePosition!).reversed())
} header: {
Text("Déjà placée en poule")
}
Section {
_teamListView(teams.filter({ $0.inRound() }).sorted(by: \.bracketPosition!).reversed())
} header: {
Text("Déjà placée dans le tableau")
}
}
.searchable(text: $searchField, placement: .navigationBarDrawer(displayMode: .always))
.keyboardType(.alphabet)
.autocorrectionDisabled()
.navigationTitle("Choisir une équipe")
.toolbarBackground(.visible, for: .navigationBar)
.navigationBarTitleDisplayMode(.inline)
}
}
}
private func _teamListView(_ teams: [TeamRegistration]) -> some View {
ForEach(teams) { team in
if searchField.isEmpty || team.contains(searchField) {
Button {
teamPicked(team)
presentTeamPickerView = false
} label: {
TeamRowView(team: team)
}
.buttonStyle(.plain)
}
}
}
}
#Preview {
TeamPickerView(teamPicked: { team in
})
.environment(Tournament.mock())
.environmentObject(DataStore.shared)
}