Park the Watch run while iPhone edits an exercise or split
Publish an exclusive-edit lock (editingWorkoutID / editingSplitID) in the phone→watch application context. While the phone has a workout's exercise (ExerciseView) or a split (SplitDetailView) open in an editor, the watch pops out of that run, blocks re-entry, and shows it as "Editing on iPhone" — so the two devices never drive the same run at once and the watch can't clobber the phone's edit with a stale optimistic write. The lock clears when the editor closes; absent keys in the latest-wins context mean "not editing". Claude-Session: https://claude.ai/code/session_01SCv7zvGFcKy47KSTnTLxRe
This commit is contained in:
@@ -12,6 +12,7 @@ import SwiftData
|
||||
|
||||
struct SplitDetailView: View {
|
||||
@Environment(SyncEngine.self) private var sync
|
||||
@Environment(AppServices.self) private var services
|
||||
@Environment(\.dismiss) private var dismiss
|
||||
|
||||
var split: Split
|
||||
@@ -109,6 +110,11 @@ struct SplitDetailView: View {
|
||||
} message: { item in
|
||||
Text("Remove \"\(item.name)\" from this split?")
|
||||
}
|
||||
// Editing this split (or any of its exercises, all reached from here) parks any
|
||||
// active watch run sourced from it — matched by splitID — so the watch can't keep
|
||||
// performing an exercise whose plan we're reconfiguring.
|
||||
.onAppear { services.watchBridge.setEditingSplit(split.id) }
|
||||
.onDisappear { services.watchBridge.setEditingSplit(nil) }
|
||||
}
|
||||
|
||||
private func moveExercises(from source: IndexSet, to destination: Int) {
|
||||
|
||||
Reference in New Issue
Block a user