add ActiveWorkoutSession logic, refactor Home, add additional sample data, add isDebug
This commit is contained in:
@@ -0,0 +1,60 @@
|
||||
//
|
||||
// ItemPicker.swift
|
||||
// WorkoutsPlus
|
||||
//
|
||||
// Created by Felix Förtsch on 10.09.24.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
import SwiftData
|
||||
|
||||
struct ItemPicker<Item: Nameable>: View {
|
||||
@Environment(\.dismiss) private var dismiss
|
||||
|
||||
@State private var searchText = ""
|
||||
var filteredItems: [Item] {
|
||||
if searchText.isEmpty {
|
||||
return items
|
||||
} else {
|
||||
return items.filter { $0.name.localizedCaseInsensitiveContains(searchText) }
|
||||
}
|
||||
}
|
||||
|
||||
var items: [Item]
|
||||
@Binding var selectedItem: Item?
|
||||
|
||||
var body: some View {
|
||||
List {
|
||||
ForEach(filteredItems) { item in
|
||||
HStack {
|
||||
Text(item.name)
|
||||
Spacer()
|
||||
if item == selectedItem {
|
||||
Image(systemName: "checkmark")
|
||||
.foregroundColor(.blue)
|
||||
}
|
||||
}
|
||||
// This .contentShape makes the whole row tappable
|
||||
.contentShape(Rectangle())
|
||||
.onTapGesture {
|
||||
selectedItem = item
|
||||
dismiss()
|
||||
}
|
||||
}
|
||||
}
|
||||
.searchable(text: $searchText)
|
||||
.overlay {
|
||||
if filteredItems.isEmpty {
|
||||
ContentUnavailableView.search(text: searchText)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#Preview {
|
||||
@Previewable @State var selectedWorkout: Workout? = nil
|
||||
NavigationStack {
|
||||
ItemPicker<Workout>(items: Workout.sampleData, selectedItem: $selectedWorkout)
|
||||
}
|
||||
.modelContainer(SampleData.shared.modelContainer)
|
||||
}
|
||||
Reference in New Issue
Block a user