diff --git a/yobble/Components/TopBarView.swift b/yobble/Components/TopBarView.swift index 3808cb4..fee3fba 100644 --- a/yobble/Components/TopBarView.swift +++ b/yobble/Components/TopBarView.swift @@ -28,11 +28,11 @@ struct TopBarView: View { } private var statusMessage: String? { - if viewModel.socketState != .connected { - return NSLocalizedString("Подключение", comment: "") - } if viewModel.chatLoadingState == .loading { return NSLocalizedString("Загрузка чатов", comment: "") + } else + if viewModel.socketState != .connected { + return NSLocalizedString("Подключение", comment: "") } return nil } diff --git a/yobble/Views/Tab/ChatsTab.swift b/yobble/Views/Tab/ChatsTab.swift index 677737f..5b4d2f4 100644 --- a/yobble/Views/Tab/ChatsTab.swift +++ b/yobble/Views/Tab/ChatsTab.swift @@ -11,7 +11,7 @@ import UIKit #endif struct ChatsTab: View { - var currentUserId: String? + @ObservedObject private var loginViewModel: LoginViewModel @Binding var searchRevealProgress: CGFloat @Binding var searchText: String private let searchService = SearchService() @@ -33,8 +33,13 @@ struct ChatsTab: View { private let searchRevealDistance: CGFloat = 90 - init(currentUserId: String? = nil, searchRevealProgress: Binding, searchText: Binding) { - self.currentUserId = currentUserId + private var currentUserId: String? { + let userId = loginViewModel.userId + return userId.isEmpty ? nil : userId + } + + init(loginViewModel: LoginViewModel, searchRevealProgress: Binding, searchText: Binding) { + self._loginViewModel = ObservedObject(wrappedValue: loginViewModel) self._searchRevealProgress = searchRevealProgress self._searchText = searchText } @@ -108,16 +113,14 @@ struct ChatsTab: View { HStack(alignment: .top, spacing: 8) { Image(systemName: "exclamationmark.triangle.fill") .foregroundColor(.orange) - Text(message) .font(.subheadline) .foregroundColor(.orange) Spacer(minLength: 0) - -// Button(action: triggerChatsReload) { -// Text(NSLocalizedString("Обновить", comment: "")) -// .font(.subheadline) -// } + Button(action: triggerChatsReload) { + Text(NSLocalizedString("Обновить", comment: "")) + .font(.subheadline) + } } .padding(.vertical, 4) } @@ -387,6 +390,9 @@ struct ChatsTab: View { } private func triggerChatsReload() { + if loginViewModel.chatLoadingState != .loading { + loginViewModel.chatLoadingState = .loading + } viewModel.loadInitialChats(force: true) } @@ -1144,10 +1150,15 @@ struct ChatsTab_Previews: PreviewProvider { struct Wrapper: View { @State private var progress: CGFloat = 1 @State private var searchText: String = "" + @StateObject private var loginViewModel = LoginViewModel() var body: some View { - ChatsTab(searchRevealProgress: $progress, searchText: $searchText) - .environmentObject(ThemeManager()) + ChatsTab( + loginViewModel: loginViewModel, + searchRevealProgress: $progress, + searchText: $searchText + ) + .environmentObject(ThemeManager()) } } diff --git a/yobble/Views/Tab/MainView.swift b/yobble/Views/Tab/MainView.swift index 2fb1df3..dd5349b 100644 --- a/yobble/Views/Tab/MainView.swift +++ b/yobble/Views/Tab/MainView.swift @@ -53,7 +53,7 @@ struct MainView: View { .opacity(selectedTab == 1 ? 1 : 0) ChatsTab( - currentUserId: viewModel.userId.isEmpty ? nil : viewModel.userId, + loginViewModel: viewModel, searchRevealProgress: $chatSearchRevealProgress, searchText: $chatSearchText )