62 lines
2.3 KiB
Swift
62 lines
2.3 KiB
Swift
import SwiftUI
|
|
|
|
/// Strong, reusable confirmation for service-affecting device resets: a red
|
|
/// warning, an explicit acknowledgement the user must switch on, and a prominent
|
|
/// red action button that stays disabled until then. Presented as a sheet so it
|
|
/// can't be dismissed by an accidental background tap into a destructive action.
|
|
struct ResetConfirmSheet: View {
|
|
let deviceKind: String // "ONU" / "OLT"
|
|
let deviceName: String
|
|
let onConfirm: () -> Void
|
|
|
|
@Environment(\.dismiss) private var dismiss
|
|
@State private var acknowledged = false
|
|
|
|
var body: some View {
|
|
NavigationStack {
|
|
Form {
|
|
Section {
|
|
HStack(spacing: 12) {
|
|
Image(systemName: "exclamationmark.triangle.fill")
|
|
.font(.title2)
|
|
.foregroundStyle(.red)
|
|
Text("Service-affecting").font(.headline)
|
|
}
|
|
Text("Resetting \(deviceKind) “\(deviceName)” reboots it and interrupts service for everything connected to it. This can take several minutes and can't be undone.")
|
|
.font(.subheadline)
|
|
}
|
|
|
|
Section {
|
|
Toggle("I understand this will interrupt service", isOn: $acknowledged)
|
|
.tint(.red)
|
|
}
|
|
|
|
Section {
|
|
Button {
|
|
onConfirm()
|
|
dismiss()
|
|
} label: {
|
|
HStack {
|
|
Spacer()
|
|
Label("Reset \(deviceKind)", systemImage: "arrow.clockwise")
|
|
.fontWeight(.semibold)
|
|
Spacer()
|
|
}
|
|
}
|
|
.buttonStyle(.borderedProminent)
|
|
.tint(.red)
|
|
.disabled(!acknowledged)
|
|
}
|
|
.listRowBackground(Color.clear)
|
|
}
|
|
.navigationTitle("Reset \(deviceKind)?")
|
|
.navigationBarTitleDisplayMode(.inline)
|
|
.toolbar {
|
|
ToolbarItem(placement: .cancellationAction) {
|
|
Button("Cancel") { dismiss() }
|
|
}
|
|
}
|
|
}
|
|
.presentationDetents([.medium])
|
|
}
|
|
}
|