implement editing

This commit is contained in:
2026-01-27 02:05:41 +01:00
parent 0362882137
commit f45f7db10b
2 changed files with 78 additions and 3 deletions

View File

@@ -53,15 +53,21 @@ class ContentViewModel: ObservableObject {
struct ContentView: View {
@StateObject private var viewModel = ContentViewModel()
@State private var isShowingAddSheet = false
@State private var selectedStopwatch: Stopwatch?
@Environment(\.scenePhase) private var scenePhase
var body: some View {
NavigationStack {
List {
ForEach(viewModel.stopwatches) { stopwatch in
StopwatchRow(stopwatch: stopwatch, onDelete: {
viewModel.deleteStopwatch(id: stopwatch.id)
})
Button {
selectedStopwatch = stopwatch
} label: {
StopwatchRow(stopwatch: stopwatch, onDelete: {
viewModel.deleteStopwatch(id: stopwatch.id)
})
}
.buttonStyle(.plain) // Preserves the row layout and interactions
}
.onDelete { indexSet in
for index in indexSet {
@@ -86,6 +92,19 @@ struct ContentView: View {
isShowingAddSheet = false
}
}
.sheet(item: $selectedStopwatch) { stopwatch in
StopwatchDetailView(
stopwatch: stopwatch,
onSave: { newName in
stopwatch.name = newName
viewModel.save()
selectedStopwatch = nil
},
onCancel: {
selectedStopwatch = nil
}
)
}
.overlay {
if viewModel.stopwatches.isEmpty {
ContentUnavailableView(

View File

@@ -0,0 +1,56 @@
//
// StopwatchDetailView.swift
// MultiChrono
//
// Created by Beatrice Dellacà on 27/01/26.
//
import SwiftUI
struct StopwatchDetailView: View {
let stopwatch: Stopwatch
let onSave: (String) -> Void
let onCancel: () -> Void
@State private var draftName: String
init(stopwatch: Stopwatch, onSave: @escaping (String) -> Void, onCancel: @escaping () -> Void) {
self.stopwatch = stopwatch
self.onSave = onSave
self.onCancel = onCancel
_draftName = State(initialValue: stopwatch.name)
}
var body: some View {
NavigationStack {
Form {
Section(header: Text("Name")) {
TextField("Enter name...", text: $draftName)
}
}
.navigationTitle("Edit Stopwatch")
.navigationBarTitleDisplayMode(.inline)
.toolbar {
ToolbarItem(placement: .cancellationAction) {
Button("Cancel") {
onCancel()
}
}
ToolbarItem(placement: .confirmationAction) {
Button("Save") {
onSave(draftName)
}
.disabled(draftName.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty)
}
}
}
}
}
#Preview {
StopwatchDetailView(
stopwatch: Stopwatch(name: "Test Timer"),
onSave: { _ in },
onCancel: {}
)
}