summaryrefslogtreecommitdiff
path: root/DomainDig/WatchlistView.swift
blob: c44fc658d9ea2827914eb52aa1dfe915a05cb7e5 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
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
        }
    }
}