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}