// // MainView.swift // VolnahubApp // // Created by cheykrym on 09/06/2025. // import SwiftUI struct MainView: View { @ObservedObject var viewModel: LoginViewModel @State private var selectedTab: Int = 0 @StateObject private var newHomeTabViewModel = NewHomeTabViewModel() // Состояния для TopBarView @State private var selectedAccount = "@user1" @State private var accounts = ["@user1", "@user2", "@user3"] @State private var sheetType: ProfileTab.SheetType? = nil // Состояния для скрытия TopBar @State private var topBarVisible = true @State private var lastScrollY: CGFloat = 0 private var tabTitle: String { switch selectedTab { case 0: return "Home" case 1: return "Search" case 2: return "Chats" case 3: return "Profile" default: return "Home" } } var body: some View { NavigationView { VStack(spacing: 0) { if topBarVisible { TopBarView( title: tabTitle, selectedAccount: $selectedAccount, sheetType: $sheetType, accounts: accounts, viewModel: viewModel ) .transition(AnyTransition.move(edge: .top).combined(with: .opacity)) } ZStack { switch selectedTab { case 0: // HomeTab(onScroll: handleScroll) NewHomeTab(viewModel: newHomeTabViewModel) case 1: SearchTab() // SearchTab не имеет скролла, поэтому onScroll не нужен case 2: ChatsTab() // ChatsTab тоже case 3: ProfileTab( viewModel: viewModel, sheetType: $sheetType, selectedAccount: $selectedAccount, accounts: $accounts, onScroll: handleScroll ) default: HomeTab(onScroll: handleScroll) } } .frame(maxWidth: .infinity, maxHeight: .infinity) if topBarVisible { CustomTabBar(selectedTab: $selectedTab) { print("Create button tapped") } } } .ignoresSafeArea(edges: .bottom) .navigationBarHidden(true) .sheet(item: $sheetType) { type in switch type { case .accountShare: AccountShareSheet( isPresented: Binding( get: { sheetType != nil }, set: { if !$0 { sheetType = nil } } ), selectedAccount: $selectedAccount, accounts: accounts ) } } } .navigationViewStyle(StackNavigationViewStyle()) } private func handleScroll(offset: CGPoint) { let currentY = offset.y // Показываем бар, если скроллим вверх или дошли до верха // if currentY < lastScrollY || currentY <= 0 { // if !topBarVisible { // withAnimation(.default) { // topBarVisible = true // } // } // } // // Скрываем, если скроллим вниз и отступили от верха // else if currentY > lastScrollY && currentY > 50 { // if topBarVisible { // withAnimation(.default) { // topBarVisible = false // } // } // } lastScrollY = currentY } } struct MainView_Previews: PreviewProvider { static var previews: some View { let mockViewModel = LoginViewModel() MainView(viewModel: mockViewModel) } }