From 452ccfacd6bdf6badce21ebee565c906faf37987 Mon Sep 17 00:00:00 2001 From: cheykrym Date: Fri, 12 Dec 2025 02:19:24 +0300 Subject: [PATCH] add alert in chat --- yobble/Resources/Localizable.xcstrings | 6 ++++++ yobble/ViewModels/PrivateChatViewModel.swift | 9 ++++++--- yobble/Views/Chat/PrivateChatView.swift | 8 ++++++++ 3 files changed, 20 insertions(+), 3 deletions(-) diff --git a/yobble/Resources/Localizable.xcstrings b/yobble/Resources/Localizable.xcstrings index 726d36b..30cf44e 100644 --- a/yobble/Resources/Localizable.xcstrings +++ b/yobble/Resources/Localizable.xcstrings @@ -598,6 +598,9 @@ }, "Добро пожаловать в Yobble!" : { + }, + "Дождитесь отправки предыдущего сообщения." : { + }, "Дополнительные действия." : { "comment" : "Message profile more action description" @@ -1910,6 +1913,9 @@ }, "Ошибка в данных. Проверьте введённую информацию." : { + }, + "Ошибка отправки" : { + }, "Ошибка при деавторизации." : { "localizations" : { diff --git a/yobble/ViewModels/PrivateChatViewModel.swift b/yobble/ViewModels/PrivateChatViewModel.swift index 485d0e1..96aa5f4 100644 --- a/yobble/ViewModels/PrivateChatViewModel.swift +++ b/yobble/ViewModels/PrivateChatViewModel.swift @@ -6,6 +6,7 @@ final class PrivateChatViewModel: ObservableObject { @Published private(set) var isInitialLoading: Bool = false @Published private(set) var isLoadingMore: Bool = false @Published var errorMessage: String? + @Published var sendingErrorMessage: String? @Published private(set) var isSending: Bool = false @Published private(set) var hasMore: Bool = true @@ -74,11 +75,12 @@ final class PrivateChatViewModel: ObservableObject { return } guard trimmed.count <= maxMessageLength else { - errorMessage = NSLocalizedString("Сообщение слишком длинное.", comment: "") + sendingErrorMessage = NSLocalizedString("Сообщение слишком длинное.", comment: "") completion(false) return } guard !isSending else { + sendingErrorMessage = NSLocalizedString("Дождитесь отправки предыдущего сообщения.", comment: "") completion(false) return } @@ -88,6 +90,7 @@ final class PrivateChatViewModel: ObservableObject { } isSending = true + sendingErrorMessage = nil chatService.sendPrivateMessage(chatId: chatId, content: trimmed) { [weak self] result in guard let self else { return } @@ -113,7 +116,7 @@ final class PrivateChatViewModel: ObservableObject { self.errorMessage = nil completion(true) case .failure(let error): - self.errorMessage = self.message(for: error) + self.sendingErrorMessage = self.message(for: error) completion(false) } @@ -213,4 +216,4 @@ final class PrivateChatViewModel: ObservableObject { return lhs.messageId < rhs.messageId } -} +} \ No newline at end of file diff --git a/yobble/Views/Chat/PrivateChatView.swift b/yobble/Views/Chat/PrivateChatView.swift index d1be8e1..d1a0965 100644 --- a/yobble/Views/Chat/PrivateChatView.swift +++ b/yobble/Views/Chat/PrivateChatView.swift @@ -66,6 +66,14 @@ struct PrivateChatView: View { } .hidden() } + .alert("Ошибка отправки", isPresented: Binding( + get: { viewModel.sendingErrorMessage != nil }, + set: { if !$0 { viewModel.sendingErrorMessage = nil } } + ), actions: { + Button("OK") { } + }, message: { + Text(viewModel.sendingErrorMessage ?? "Не удалось отправить сообщение.") + }) .navigationTitle(toolbarTitle) .navigationBarTitleDisplayMode(.inline) // .navigationBarBackButtonHidden(true)