70 lines
2.2 KiB
Swift
70 lines
2.2 KiB
Swift
import SwiftUI
|
|
import Collections
|
|
|
|
struct WorkoutDetailView: View {
|
|
|
|
@EnvironmentObject
|
|
var database: HealthDatabase
|
|
|
|
let workout: Workout
|
|
|
|
var body: some View {
|
|
List {
|
|
Section("Info") {
|
|
DetailRow("ID", value: workout.id)
|
|
DetailRow("Total Distance", kilometer: workout.totalDistance)
|
|
DetailRow("Goal", value: workout.goal)
|
|
DetailRow("Condenser Version", value: workout.condenserVersion)
|
|
DetailRow("Condenser Date", date: workout.condenserDate)
|
|
}
|
|
if !workout.activities.isEmpty {
|
|
Section("Activities") {
|
|
ForEach(workout.activities, id: \.startDate) { activity in
|
|
NavigationLink(value: activity) {
|
|
DetailRow(activity.activityType.description,
|
|
date: activity.startDate)
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
if !workout.events.isEmpty {
|
|
Section("Events") {
|
|
ForEach(workout.events) { event in
|
|
NavigationLink(value: event) {
|
|
DetailRow(event.type.description, date: event.date)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if !workout.metadata.isEmpty {
|
|
Section("Metadata") {
|
|
ForEach(workout.metadata.elements, id:\.key) { (key, value) in
|
|
DetailRow(key.description, value: value)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
.navigationTitle(workout.typeString)
|
|
.navigationDestination(for: WorkoutActivity.self) { activity in
|
|
ActivityDetailView(activity: activity)
|
|
.environmentObject(database)
|
|
}
|
|
.navigationDestination(for: WorkoutEvent.self) { event in
|
|
EventDetailView(event: event)
|
|
}
|
|
}
|
|
}
|
|
|
|
#Preview {
|
|
NavigationStack {
|
|
WorkoutDetailView(workout: .mock1)
|
|
.environmentObject(HealthDatabase.mock())
|
|
}
|
|
}
|
|
|
|
extension String: Identifiable {
|
|
|
|
public var id: Self { self }
|
|
}
|