another.im-ios/ConversationsClassic/View/Main/MainTabScreen.swift
2024-08-11 17:04:42 +02:00

114 lines
3 KiB
Swift

import Foundation
import SwiftfulRouting
import SwiftUI
private enum Tab {
case conversations
case contacts
case settings
}
struct MainTabScreen: View {
@State private var selectedTab: Tab = .conversations
var body: some View {
ZStack {
// Background color
Color.Material.Background.light
.ignoresSafeArea()
// Content
VStack(spacing: 0) {
switch selectedTab {
case .conversations:
Color.red
// ConversationsScreen()
case .contacts:
RouterView { _ in
ContactsScreen()
}
case .settings:
Color.green
// SettingsScreen()
}
// Tab bar
TabBar(selectedTab: $selectedTab)
}
}
}
}
private struct TabBar: View {
@Binding var selectedTab: Tab
var body: some View {
VStack(spacing: 0) {
Rectangle()
.frame(maxWidth: .infinity)
.frame(height: 0.2)
.foregroundColor(.Material.Shape.separator)
HStack(spacing: 0) {
TabBarButton(buttonType: .contacts, selectedTab: $selectedTab)
TabBarButton(buttonType: .conversations, selectedTab: $selectedTab)
TabBarButton(buttonType: .settings, selectedTab: $selectedTab)
}
.background(Color.Material.Background.dark)
}
.frame(height: 50)
}
}
private struct TabBarButton: View {
let buttonType: Tab
@Binding var selectedTab: Tab
var body: some View {
ZStack {
VStack(spacing: 2) {
buttonImg
.foregroundColor(buttonType == selectedTab ? .Material.Elements.active : .Material.Elements.inactive)
.font(.system(size: 24, weight: .light))
.symbolRenderingMode(.hierarchical)
Text(buttonTitle)
.font(.sub1)
.foregroundColor(buttonType == selectedTab ? .Material.Text.main : .Material.Elements.inactive)
}
Rectangle()
.foregroundColor(.white.opacity(0.01))
.onTapGesture {
selectedTab = buttonType
}
}
}
var buttonImg: Image {
switch buttonType {
case .contacts:
return Image(systemName: "person.2.fill")
case .conversations:
return Image(systemName: "bubble.left.fill")
case .settings:
return Image(systemName: "gearshape.fill")
}
}
var buttonTitle: String {
switch buttonType {
case .contacts:
return L10n.Tabs.Name.contacts
case .conversations:
return L10n.Tabs.Name.conversations
case .settings:
return L10n.Tabs.Name.settings
}
}
}