diff options
Diffstat (limited to 'DomainDig/BatchSweepSummaryView.swift')
| -rw-r--r-- | DomainDig/BatchSweepSummaryView.swift | 68 |
1 files changed, 68 insertions, 0 deletions
diff --git a/DomainDig/BatchSweepSummaryView.swift b/DomainDig/BatchSweepSummaryView.swift new file mode 100644 index 0000000..fda2bc5 --- /dev/null +++ b/DomainDig/BatchSweepSummaryView.swift @@ -0,0 +1,68 @@ +import SwiftUI + +struct BatchSweepSummaryView: View { + @Bindable var viewModel: DomainViewModel + let summary: BatchSweepSummary + + @State private var showUnchangedDomains = false + + private var visibleResults: [BatchLookupResult] { + if showUnchangedDomains { + return summary.results + } + + return summary.results.filter { + ($0.changeSeverity ?? .low) >= .medium || $0.certificateWarningLevel != .none || $0.status == .failed + } + } + + var body: some View { + NavigationStack { + List { + Section("Overview") { + statRow(label: "Checked", value: "\(summary.totalDomains)") + statRow(label: "Changed", value: "\(summary.changedDomains)") + statRow(label: "Warnings", value: "\(summary.warningDomains)") + statRow(label: "Unchanged", value: "\(summary.unchangedDomains)") + } + + Section { + Toggle("Show unchanged domains", isOn: $showUnchangedDomains) + } + + Section(visibleResults.isEmpty ? "Changed Domains" : "Results") { + if visibleResults.isEmpty { + Text("No domains with changes or warnings") + .font(.system(.caption, design: .monospaced)) + .foregroundStyle(.secondary) + } else { + ForEach(visibleResults) { result in + if let entry = viewModel.historyEntry(for: result) { + NavigationLink { + HistoryDetailView(viewModel: viewModel, entry: entry) + } label: { + BatchResultRowView(result: result) + } + } else { + BatchResultRowView(result: result) + } + } + } + } + } + .navigationTitle(summary.source == .watchlistRefresh ? "Sweep Summary" : "Batch Summary") + } + } + + private func statRow(label: String, value: String) -> some View { + HStack { + Text(label) + .font(.system(.caption, design: .monospaced)) + .foregroundStyle(.secondary) + Spacer() + Text(value) + .font(.system(.callout, design: .monospaced)) + .foregroundStyle(.primary) + } + } +} |
