Parent directory

ContentView.swift

2151 bytes
 1import SwiftUI
 2
 3struct ContentView: View {
 4    private enum Tab: Hashable {
 5        case feed
 6        case history
 7        case channels
 8        case search
 9    }
10
11    @StateObject private var settings = SettingsStore()
12    @State private var selectedTab: Tab = .feed
13    @State private var isFeedSearchVisible = false
14    @State private var isHistorySearchVisible = false
15
16    var body: some View {
17        if settings.configuration == nil {
18            NavigationStack {
19                SettingsView(settings: settings)
20            }
21        } else {
22            TabView(selection: $selectedTab) {
23                NavigationStack {
24                    FeedView(settings: settings, isSearchVisible: $isFeedSearchVisible)
25                }
26                .tabItem {
27                    Label("Feed", systemImage: "play.rectangle")
28                }
29                .tag(Tab.feed)
30
31                NavigationStack {
32                    HistoryView(settings: settings, isSearchVisible: $isHistorySearchVisible)
33                }
34                .tabItem {
35                    Label("History", systemImage: "clock")
36                }
37                .tag(Tab.history)
38
39                NavigationStack {
40                    ChannelsView(settings: settings)
41                }
42                .tabItem {
43                    Label("Channels", systemImage: "rectangle.stack")
44                }
45                .tag(Tab.channels)
46
47                Color.clear
48                    .tabItem {
49                        Label("Search", systemImage: "magnifyingglass")
50                    }
51                    .tag(Tab.search)
52            }
53            .onChange(of: selectedTab) { previousTab, selectedTab in
54                guard selectedTab == .search else {
55                    return
56                }
57
58                switch previousTab {
59                case .feed:
60                    isFeedSearchVisible = true
61                case .history:
62                    isHistorySearchVisible = true
63                case .channels, .search:
64                    break
65                }
66                self.selectedTab = previousTab
67            }
68        }
69    }
70}