aboutsummaryrefslogtreecommitdiff
path: root/Hotline/Views/TrackerView.swift
blob: edb2330db34a9d6d465929dcae52c74b8f360ad2 (plain)
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
import SwiftUI

struct TrackerView: View {
  
  //  @Environment(\.modelContext) private var modelContext
  //  @Query private var items: [Item]
  
  @Environment(HotlineState.self) private var appState
  @Environment(HotlineClient.self) private var hotline
  @Environment(HotlineTrackerClient.self) private var tracker
  
  @State private var selectedServer: HotlineServer?
  
  var body: some View {
    @Bindable var config = appState
    
    NavigationView {
      List(selection: $selectedServer) {
        ForEach(tracker.servers) { server in
          TrackerServerView(server: server)
        }
      }
      .background(Color(white: 0.96))
      .listStyle(.plain)
      .frame(maxWidth: .infinity)
      .task {
        tracker.fetch()
      }
//      .sheet(item: $selectedServer) { item in
//        TrackerServerView(server: item)
//      }
      .refreshable {
        tracker.fetch()
      }
      .navigationTitle("Tracker")
      .navigationBarTitleDisplayMode(.inline)
      .toolbar {
        ToolbarItem(placement: .topBarTrailing) {
          Button {
            config.dismissTracker()
          } label: {
            Image(systemName: "xmark.circle.fill")
              .symbolRenderingMode(.hierarchical)
              .foregroundColor(.gray)
          }
        }
        //        ToolbarItem(placement: .topBarTrailing) {
        //          Image(systemName: "camera.fill")
        //        }
        //        ToolbarItem(placement: .principal) {
        //          Text("Username")
        //        }
      }
    }
//    .interactiveDismissDisabled()
  }
}

#Preview {
  TrackerView()
    .environment(HotlineClient())
    .environment(HotlineTrackerClient(tracker: HotlineTracker("hltracker.com")))
  //    .modelContainer(for: Item.self, inMemory: true)
}