IceCubes/IceCubesApp/App/Tabs/Tabs.swift

105 lines
2.7 KiB
Swift
Raw Normal View History

2022-12-27 09:25:26 +01:00
import Account
import Explore
2023-01-17 11:36:01 +01:00
import Foundation
import Status
2022-12-27 09:25:26 +01:00
import SwiftUI
enum Tab: Int, Identifiable, Hashable {
case timeline, notifications, mentions, explore, messages, settings, other
2023-01-16 14:40:23 +01:00
case trending, federated, local
case profile
2023-01-17 11:36:01 +01:00
2022-12-27 09:25:26 +01:00
var id: Int {
rawValue
}
2023-01-17 11:36:01 +01:00
2022-12-27 09:25:26 +01:00
static func loggedOutTab() -> [Tab] {
[.timeline, .settings]
}
2023-01-17 11:36:01 +01:00
2022-12-27 09:25:26 +01:00
static func loggedInTabs() -> [Tab] {
2023-01-16 14:40:23 +01:00
if UIDevice.current.userInterfaceIdiom == .pad || UIDevice.current.userInterfaceIdiom == .mac {
return [.timeline, .trending, .federated, .local, .notifications, .mentions, .explore, .messages, .settings]
2023-01-16 14:40:23 +01:00
} else {
return [.timeline, .notifications, .explore, .messages, .settings]
}
2022-12-27 09:25:26 +01:00
}
2023-01-17 11:36:01 +01:00
2022-12-27 09:25:26 +01:00
@ViewBuilder
func makeContentView(popToRootTab: Binding<Tab>) -> some View {
switch self {
case .timeline:
TimelineTab(popToRootTab: popToRootTab)
2023-01-16 14:40:23 +01:00
case .trending:
TimelineTab(popToRootTab: popToRootTab, timeline: .trending)
case .local:
TimelineTab(popToRootTab: popToRootTab, timeline: .local)
case .federated:
TimelineTab(popToRootTab: popToRootTab, timeline: .federated)
2022-12-27 09:25:26 +01:00
case .notifications:
NotificationsTab(popToRootTab: popToRootTab, lockedType: nil)
case .mentions:
NotificationsTab(popToRootTab: popToRootTab, lockedType: .mention)
2022-12-27 09:25:26 +01:00
case .explore:
ExploreTab(popToRootTab: popToRootTab)
case .messages:
MessagesTab(popToRootTab: popToRootTab)
2022-12-27 09:25:26 +01:00
case .settings:
2023-01-10 06:58:50 +01:00
SettingsTabs(popToRootTab: popToRootTab)
2023-01-16 14:40:23 +01:00
case .other, .profile:
2022-12-27 09:25:26 +01:00
EmptyView()
}
}
2023-01-17 11:36:01 +01:00
2022-12-27 09:25:26 +01:00
@ViewBuilder
var label: some View {
switch self {
case .timeline:
2023-01-16 14:40:23 +01:00
Label("Timeline", systemImage: iconName)
case .trending:
Label("Trending", systemImage: iconName)
case .local:
Label("Local", systemImage: iconName)
case .federated:
Label("Federated", systemImage: iconName)
2022-12-27 09:25:26 +01:00
case .notifications:
2023-01-16 14:40:23 +01:00
Label("Notifications", systemImage: iconName)
case .mentions:
Label("Notifications", systemImage: iconName)
2022-12-27 09:25:26 +01:00
case .explore:
2023-01-16 14:40:23 +01:00
Label("Explore", systemImage: iconName)
case .messages:
2023-01-16 14:40:23 +01:00
Label("Messages", systemImage: iconName)
2022-12-27 09:25:26 +01:00
case .settings:
2023-01-16 14:40:23 +01:00
Label("Settings", systemImage: iconName)
case .other, .profile:
2022-12-27 09:25:26 +01:00
EmptyView()
}
}
2023-01-17 11:36:01 +01:00
2023-01-16 14:40:23 +01:00
var iconName: String {
switch self {
case .timeline:
return "rectangle.on.rectangle"
case .trending:
return "chart.line.uptrend.xyaxis"
case .local:
return "person.2"
case .federated:
return "globe.americas"
case .notifications:
return "bell"
case .mentions:
return "at"
2023-01-16 14:40:23 +01:00
case .explore:
return "magnifyingglass"
case .messages:
return "tray"
case .settings:
return "gear"
case .other, .profile:
return ""
}
}
2022-12-27 09:25:26 +01:00
}