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.
74 lines
2.4 KiB
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.available() }).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)
|
|
|
|
}
|
|
|