2023-01-16 19:51:05 +01:00
|
|
|
import SwiftUI
|
|
|
|
import Env
|
|
|
|
import Account
|
|
|
|
import DesignSystem
|
2023-01-16 21:15:33 +01:00
|
|
|
import AppAccount
|
2023-01-16 19:51:05 +01:00
|
|
|
|
|
|
|
struct SideBarView<Content: View>: View {
|
|
|
|
@EnvironmentObject private var currentAccount: CurrentAccount
|
|
|
|
@EnvironmentObject private var theme: Theme
|
|
|
|
|
|
|
|
@Binding var selectedTab: Tab
|
|
|
|
@Binding var popToRootTab: Tab
|
|
|
|
var tabs: [Tab]
|
2023-01-16 21:15:33 +01:00
|
|
|
@ViewBuilder var content: () -> Content
|
2023-01-16 19:51:05 +01:00
|
|
|
|
|
|
|
var body: some View {
|
|
|
|
HStack(spacing: 0) {
|
|
|
|
VStack(alignment: .center) {
|
2023-01-16 21:27:54 +01:00
|
|
|
Button {
|
|
|
|
selectedTab = .profile
|
|
|
|
} label: {
|
|
|
|
AppAccountsSelectorView(routeurPath: RouterPath(),
|
|
|
|
accountCreationEnabled: false,
|
|
|
|
avatarSize: .status)
|
2023-01-16 19:51:05 +01:00
|
|
|
}
|
2023-01-16 21:27:54 +01:00
|
|
|
.frame(width: 70, height: 60)
|
|
|
|
.background(selectedTab == .profile ? theme.secondaryBackgroundColor : .clear)
|
2023-01-16 19:51:05 +01:00
|
|
|
ForEach(tabs) { tab in
|
|
|
|
Button {
|
|
|
|
if tab == selectedTab {
|
|
|
|
popToRootTab = .other
|
|
|
|
DispatchQueue.main.asyncAfter(deadline: .now() + 0.01) {
|
|
|
|
popToRootTab = tab
|
|
|
|
}
|
|
|
|
}
|
|
|
|
selectedTab = tab
|
|
|
|
} label: {
|
|
|
|
Image(systemName: tab.iconName)
|
|
|
|
.resizable()
|
|
|
|
.aspectRatio(contentMode: .fit)
|
|
|
|
.frame(width: 24, height: 24)
|
|
|
|
.foregroundColor(tab == selectedTab ? theme.tintColor : .gray)
|
|
|
|
}
|
|
|
|
.frame(width: 70, height: 50)
|
|
|
|
.background(tab == selectedTab ? theme.secondaryBackgroundColor : .clear)
|
|
|
|
}
|
|
|
|
Spacer()
|
|
|
|
}
|
|
|
|
.frame(width: 70)
|
|
|
|
.background(.clear)
|
|
|
|
Divider()
|
|
|
|
.edgesIgnoringSafeArea(.top)
|
2023-01-16 21:15:33 +01:00
|
|
|
content()
|
2023-01-16 19:51:05 +01:00
|
|
|
}
|
|
|
|
.background(.thinMaterial)
|
|
|
|
}
|
|
|
|
}
|