import SwiftUI struct SetsView: View { @StateObject private var setsViewModel = SetsViewModel() @State private var searchText = "" @State private var showingConfirmationDialog = false @State private var showingAddSetView = false var filteredSets: [Set] { if searchText.isEmpty { return setsViewModel.sets } else { return setsViewModel.sets.filter { set in set.code.lowercased().contains(searchText.lowercased()) || set.name.lowercased().contains(searchText.lowercased()) } } } var body: some View { NavigationView { List { ForEach(filteredSets) { set in VStack { HStack { Text(set.name) .font(.headline) .alignmentGuide(.leading) {_ in 0 } Spacer() } HStack { Text(set.code) Text("-") Text("\(set.releaseDate.formatted(date: .numeric, time: .omitted))") Text("-") Text(set.numberOfCards == 1 ? "1 card" : "\(set.numberOfCards) cards") } } } .onDelete { indexSet in indexSet.forEach { index in let set = setsViewModel.sets[index] if let recordId = set.id { setsViewModel.delete(recordId) } } } } .toolbar { Button { showingAddSetView = true } label: { Image(systemName: "plus.circle.fill") } .sheet(isPresented: $showingAddSetView) { AddSetView(addSetViewModel: AddSetView.AddSetViewModel(set: Set.example)) } .task { do { let _: () = try await setsViewModel.fetchSets() // Fetching Sets records } catch { print(error.localizedDescription) } } } .searchable(text: $searchText, prompt: "Search a set") .navigationTitle("Sets") } } }