diff options
Diffstat (limited to 'DomainDig/WatchlistView.swift')
| -rw-r--r-- | DomainDig/WatchlistView.swift | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/DomainDig/WatchlistView.swift b/DomainDig/WatchlistView.swift new file mode 100644 index 0000000..c44fc65 --- /dev/null +++ b/DomainDig/WatchlistView.swift @@ -0,0 +1,69 @@ +import SwiftUI + +struct WatchlistView: View { + @Bindable var viewModel: DomainViewModel + @Environment(\.dismiss) private var dismiss + + var body: some View { + List { + if viewModel.watchedDomains.isEmpty { + Text("No watched domains") + .font(.system(.callout, design: .monospaced)) + .foregroundStyle(.secondary) + .listRowBackground(Color(.systemGray6).opacity(0.5)) + } else { + ForEach(viewModel.watchedDomains) { watchedDomain in + Button { + viewModel.domain = watchedDomain.domain + dismiss() + viewModel.run() + } label: { + VStack(alignment: .leading, spacing: 4) { + Text(watchedDomain.domain) + .font(.system(.callout, design: .monospaced)) + .foregroundStyle(.primary) + Text(statusLabel(watchedDomain.lastKnownAvailability)) + .font(.system(.caption2, design: .monospaced)) + .foregroundStyle(statusColor(watchedDomain.lastKnownAvailability)) + } + } + .listRowBackground(Color(.systemGray6).opacity(0.5)) + } + .onDelete { offsets in + viewModel.removeWatchedDomains(at: offsets) + } + } + } + .scrollContentBackground(.hidden) + .background(Color.black) + .navigationTitle("Watchlist") + .toolbar { + if !viewModel.watchedDomains.isEmpty { + EditButton() + } + } + .preferredColorScheme(.dark) + } + + private func statusLabel(_ status: DomainAvailabilityStatus?) -> String { + switch status { + case .available: + return "Available" + case .registered: + return "Registered" + case .unknown, .none: + return "Unknown" + } + } + + private func statusColor(_ status: DomainAvailabilityStatus?) -> Color { + switch status { + case .available: + return .green + case .registered: + return .yellow + case .unknown, .none: + return .secondary + } + } +} |
