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

View File

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