initial commit
This commit is contained in:
commit
8de962eeb8
44 changed files with 4843 additions and 0 deletions
62
ResetConfirmSheet.swift
Normal file
62
ResetConfirmSheet.swift
Normal file
|
|
@ -0,0 +1,62 @@
|
|||
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])
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue