Add a starter routine gallery with per-seed restore
The Library tab's routines pane gains a "Browse Starter Routines" entry opening a gallery of every bundled seed — kept or deleted — each showing Added / name-taken / restorable state, a read-only plan preview, and a one-tap Add that lifts the seed's delete veto. A "Re-add All Missing Starters" fallback replaces the all-or-nothing Settings button, which is removed. The delete confirmation now also warns how many scheduled days would be left behind on the Today board. Claude-Session: https://claude.ai/code/session_01H8VxUX4ckjU3vRF5M4L5FV
This commit is contained in:
@@ -22,9 +22,6 @@ struct SettingsView: View {
|
||||
@AppStorage("spokenCueStyle") private var spokenCueStyle: SpokenCueStyle = .cues
|
||||
@AppStorage(SpeechSettings.voiceIdentifierKey) private var speechVoiceIdentifier = ""
|
||||
|
||||
@State private var isRestoringSeeds = false
|
||||
@State private var restoreSeedsMessage: String?
|
||||
|
||||
/// Installed English voices, best quality first. Loaded on appear (not per render) since
|
||||
/// `speechVoices()` is a touch heavy and the list only changes when the user downloads a
|
||||
/// voice in system settings — re-read on each appear catches a return from doing exactly that.
|
||||
@@ -86,38 +83,6 @@ struct SettingsView: View {
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Starter Routines Section
|
||||
Section {
|
||||
Button {
|
||||
Task {
|
||||
isRestoringSeeds = true
|
||||
restoreSeedsMessage = nil
|
||||
let n = await sync.restoreSeeds()
|
||||
isRestoringSeeds = false
|
||||
restoreSeedsMessage = n == 0
|
||||
? "All starter routines are already present."
|
||||
: "Restored \(n) starter routine\(n == 1 ? "" : "s")."
|
||||
}
|
||||
} label: {
|
||||
HStack {
|
||||
Label("Restore Starter Routines", systemImage: "arrow.counterclockwise")
|
||||
if isRestoringSeeds {
|
||||
Spacer()
|
||||
ProgressView()
|
||||
}
|
||||
}
|
||||
}
|
||||
.disabled(isRestoringSeeds || sync.iCloudStatus != .available)
|
||||
} header: {
|
||||
Text("Starter Routines")
|
||||
} footer: {
|
||||
if let restoreSeedsMessage {
|
||||
Text(restoreSeedsMessage)
|
||||
} else {
|
||||
Text("Brings back the bundled starter routines you've deleted. Routines you've edited or created are never touched.")
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - iCloud Sync Section
|
||||
Section {
|
||||
switch sync.iCloudStatus {
|
||||
|
||||
Reference in New Issue
Block a user