Files
multi-chrono-ios/MultiChrono/ContentView.swift

82 lines
2.3 KiB
Swift

//
// ContentView.swift
// MultiChrono
//
// Created by Beatrice Dellacà on 26/01/26.
//
import SwiftUI
import Combine
class ContentViewModel: ObservableObject {
@Published var stopwatches: [Stopwatch] = []
func addStopwatch(name: String) {
let newStopwatch = Stopwatch(name: name)
stopwatches.append(newStopwatch)
}
func deleteStopwatch(at index: Int) {
stopwatches[index].pause() // Ensure timer is stopped
stopwatches.remove(at: index)
}
func deleteStopwatch(id: UUID) {
if let index = stopwatches.firstIndex(where: { $0.id == id }) {
deleteStopwatch(at: index)
}
}
}
struct ContentView: View {
@StateObject private var viewModel = ContentViewModel()
@State private var isShowingAddSheet = false
var body: some View {
NavigationStack {
List {
ForEach(viewModel.stopwatches) { stopwatch in
StopwatchRow(stopwatch: stopwatch, onDelete: {
viewModel.deleteStopwatch(id: stopwatch.id)
})
}
.onDelete { indexSet in
for index in indexSet {
viewModel.deleteStopwatch(at: index)
}
}
}
.listStyle(.plain)
.navigationTitle("MultiChrono")
.toolbar {
ToolbarItem(placement: .primaryAction) {
Button(action: {
isShowingAddSheet = true
}) {
Image(systemName: "plus")
}
}
}
.sheet(isPresented: $isShowingAddSheet) {
AddStopwatchView { name in
viewModel.addStopwatch(name: name)
isShowingAddSheet = false
}
}
.overlay {
if viewModel.stopwatches.isEmpty {
ContentUnavailableView(
"No Stopwatches",
systemImage: "timer",
description: Text("Tap the + button to create a stopwatch.")
)
}
}
}
}
}
#Preview {
ContentView()
}