summaryrefslogtreecommitdiff
path: root/DomainDig/RootTabView.swift
blob: f2c9f6cc7d4adb83ac8df4585aae6b6608c970e9 (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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import SwiftUI

private enum RootTab: Hashable {
    case dashboard
    case audit
    case history
    case inspect
    case settings
}

struct RootTabView: View {
    @Bindable var viewModel: DomainViewModel
    @State private var purchaseService = PurchaseService.shared
    @State private var selectedTab: RootTab = FeatureAccessService.currentTier == .free ? .inspect : .dashboard

    var body: some View {
        let _ = purchaseService.currentTier

        TabView(selection: $selectedTab) {
            NavigationStack {
                DashboardView(viewModel: viewModel)
            }
            .tabItem {
                Label("Dashboard", systemImage: "square.grid.2x2")
            }
            .tag(RootTab.dashboard)

            NavigationStack {
                AuditListView(viewModel: viewModel)
            }
            .tabItem {
                Label("Audit", systemImage: "checklist")
            }
            .tag(RootTab.audit)

            NavigationStack {
                HistoryView(viewModel: viewModel)
            }
            .tabItem {
                Label("History", systemImage: "clock.arrow.trianglehead.counterclockwise.rotate.90")
            }
            .tag(RootTab.history)

            ContentView(viewModel: viewModel)
                .tabItem {
                    Label("Inspect", systemImage: "magnifyingglass")
                }
                .tag(RootTab.inspect)

            NavigationStack {
                SettingsView(viewModel: viewModel)
            }
            .tabItem {
                Label("Settings", systemImage: "gearshape")
            }
            .tag(RootTab.settings)
        }
        .sheet(isPresented: Binding(
            get: { viewModel.isPaywallPresented },
            set: { viewModel.isPaywallPresented = $0 }
        )) {
            PaywallView()
        }
        .alert(item: Binding(
            get: { viewModel.upgradePrompt },
            set: { viewModel.upgradePrompt = $0 }
        )) { prompt in
            Alert(
                title: Text(prompt.title),
                message: Text(prompt.message),
                primaryButton: .default(Text("Open Paywall")) {
                    viewModel.upgradePrompt = nil
                    viewModel.isPaywallPresented = true
                },
                secondaryButton: .cancel(Text("Continue")) {
                    viewModel.upgradePrompt = nil
                }
            )
        }
        .onChange(of: purchaseService.currentTier) { _, newValue in
            if newValue != .free, selectedTab == .inspect, viewModel.trackedDomains.isEmpty == false {
                selectedTab = .dashboard
            }
        }
    }
}