disable notification while chat is opened

This commit is contained in:
cheykrym 2025-10-21 20:32:36 +03:00
parent ed91efacf5
commit 86924af785
2 changed files with 19 additions and 0 deletions

View File

@ -5,6 +5,7 @@ final class IncomingMessageCenter: ObservableObject {
@Published private(set) var banner: IncomingMessageBanner? @Published private(set) var banner: IncomingMessageBanner?
@Published var presentedChat: PrivateChatListItem? @Published var presentedChat: PrivateChatListItem?
var currentUserId: String? var currentUserId: String?
var activeChatId: String?
private var dismissWorkItem: DispatchWorkItem? private var dismissWorkItem: DispatchWorkItem?
private var cancellables = Set<AnyCancellable>() private var cancellables = Set<AnyCancellable>()
@ -29,6 +30,7 @@ final class IncomingMessageCenter: ObservableObject {
func openCurrentChat() { func openCurrentChat() {
guard let banner else { return } guard let banner else { return }
activeChatId = banner.message.chatId
presentedChat = makeChatItem(from: banner.message) presentedChat = makeChatItem(from: banner.message)
dismissBanner() dismissBanner()
} }
@ -38,6 +40,14 @@ final class IncomingMessageCenter: ObservableObject {
return return
} }
if let activeChatId, activeChatId == message.chatId {
return
}
if let presentedChat, presentedChat.chatId == message.chatId {
return
}
banner = buildBanner(from: message) banner = buildBanner(from: message)
scheduleDismiss() scheduleDismiss()
} }

View File

@ -8,6 +8,7 @@ struct PrivateChatView: View {
@State private var hasPositionedToBottom: Bool = false @State private var hasPositionedToBottom: Bool = false
@State private var draftText: String = "" @State private var draftText: String = ""
@FocusState private var isComposerFocused: Bool @FocusState private var isComposerFocused: Bool
@EnvironmentObject private var messageCenter: IncomingMessageCenter
init(chat: PrivateChatListItem, currentUserId: String?) { init(chat: PrivateChatListItem, currentUserId: String?) {
self.chat = chat self.chat = chat
@ -34,6 +35,9 @@ struct PrivateChatView: View {
.task { .task {
viewModel.loadInitialHistory() viewModel.loadInitialHistory()
} }
.onAppear {
messageCenter.activeChatId = chat.chatId
}
.onChange(of: viewModel.isInitialLoading) { isLoading in .onChange(of: viewModel.isInitialLoading) { isLoading in
if isLoading { if isLoading {
hasPositionedToBottom = false hasPositionedToBottom = false
@ -42,6 +46,11 @@ struct PrivateChatView: View {
.safeAreaInset(edge: .bottom) { .safeAreaInset(edge: .bottom) {
composer composer
} }
.onDisappear {
if messageCenter.activeChatId == chat.chatId {
messageCenter.activeChatId = nil
}
}
} }
@ViewBuilder @ViewBuilder