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.
91 lines
3.0 KiB
91 lines
3.0 KiB
//
|
|
// TournamentPickerView.swift
|
|
// PadelClub
|
|
//
|
|
// Created by Razmig Sarkissian on 29/09/2025.
|
|
//
|
|
|
|
import SwiftUI
|
|
import LeStorage
|
|
import PadelClubData
|
|
import TipKit
|
|
|
|
struct TournamentPickerView: View {
|
|
@EnvironmentObject var dataStore: DataStore
|
|
@Environment(\.dismiss) private var dismiss
|
|
let mergeTournamentTip = MergeTournamentTip()
|
|
let event: Event
|
|
@State private var selectedTournamentIds: Set<String> = Set()
|
|
@State private var shouldEraseEmptyEvents: Bool = false
|
|
|
|
var tournaments: [Tournament] {
|
|
dataStore.tournaments.filter({ $0.isDeleted == false && $0.event?.id != event.id }).sorted(by: \.startDate, order: .descending)
|
|
}
|
|
|
|
var body: some View {
|
|
List(selection: $selectedTournamentIds) {
|
|
Section {
|
|
TipView(mergeTournamentTip)
|
|
.tipStyle(tint: .green)
|
|
}
|
|
|
|
Section {
|
|
Toggle(isOn: $shouldEraseEmptyEvents) {
|
|
Text("Effacer les événements vides")
|
|
Text("Les événements qui n'ont plus de tournois seront effacés automatiquement.")
|
|
}
|
|
}
|
|
|
|
ForEach(tournaments) { tournament in
|
|
TournamentCellView(tournament: tournament).tag(tournament.id)
|
|
}
|
|
}
|
|
.environment(\.editMode, Binding.constant(EditMode.active))
|
|
.toolbar {
|
|
ToolbarItem(placement: .topBarLeading) {
|
|
Button("Annuler") {
|
|
dismiss()
|
|
}
|
|
}
|
|
ToolbarItem(placement: .topBarTrailing) {
|
|
ButtonValidateView {
|
|
_transferTournaments()
|
|
dismiss()
|
|
}
|
|
.disabled(selectedTournamentIds.isEmpty)
|
|
}
|
|
}
|
|
.navigationTitle("Transfert de tournois")
|
|
}
|
|
|
|
private func _transferTournaments() {
|
|
let tournaments = tournaments
|
|
var eventIdsToCheck = Set<String>()
|
|
var tournamentsToSave = [Tournament]()
|
|
selectedTournamentIds.forEach { id in
|
|
if let tournament = tournaments.first(where: { $0.id == id }) {
|
|
if let eventId = tournament.event{
|
|
eventIdsToCheck.insert(eventId)
|
|
}
|
|
tournament.event = event.id
|
|
tournamentsToSave.append(tournament)
|
|
}
|
|
}
|
|
|
|
dataStore.tournaments.addOrUpdate(contentOfs: tournamentsToSave)
|
|
|
|
if shouldEraseEmptyEvents {
|
|
|
|
var eventsToDelete = [Event]()
|
|
eventIdsToCheck.forEach { eventId in
|
|
if let eventToCheck = dataStore.events.first(where: { $0.id == eventId }) {
|
|
if eventToCheck.tournaments.isEmpty && shouldEraseEmptyEvents {
|
|
eventsToDelete.append(eventToCheck)
|
|
}
|
|
}
|
|
}
|
|
|
|
dataStore.events.delete(contentOfs: eventsToDelete)
|
|
}
|
|
}
|
|
}
|
|
|