Skip to content

Commit 2598aeb

Browse files
Fixed loading of pinned messages in the channel info screen (#462)
1 parent a0064d6 commit 2598aeb

File tree

6 files changed

+40
-8
lines changed

6 files changed

+40
-8
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
88

99
### 🐞 Fixed
1010
- Reactions picker for large messages sometimes goes in the safe area
11+
- Loading of pinned messages in the channel info screen
1112

1213
# [4.50.1](https://github.com/GetStream/stream-chat-swiftui/releases/tag/4.50.1)
1314
_March 14, 2024_

Sources/StreamChatSwiftUI/ChatChannel/ChannelInfo/ChatChannelInfoHelperViews.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,10 @@ public struct ChatInfoOptionsView: View {
8888
icon: images.pin,
8989
title: L10n.ChatInfo.PinnedMessages.title
9090
) {
91-
PinnedMessagesView(channel: viewModel.channel)
91+
PinnedMessagesView(
92+
channel: viewModel.channel,
93+
channelController: viewModel.channelController
94+
)
9295
}
9396

9497
Divider()

Sources/StreamChatSwiftUI/ChatChannel/ChannelInfo/ChatChannelInfoViewModel.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public class ChatChannelInfoViewModel: ObservableObject, ChatChannelControllerDe
4545
channel.ownCapabilities.contains(.updateChannel)
4646
}
4747

48-
private var channelController: ChatChannelController!
48+
var channelController: ChatChannelController!
4949
private var memberListController: ChatChannelMemberListController!
5050
private var loadingUsers = false
5151

Sources/StreamChatSwiftUI/ChatChannel/ChannelInfo/PinnedMessagesView.swift

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,12 @@ public struct PinnedMessagesView: View {
1010

1111
@StateObject private var viewModel: PinnedMessagesViewModel
1212

13-
public init(channel: ChatChannel) {
13+
public init(channel: ChatChannel, channelController: ChatChannelController? = nil) {
1414
_viewModel = StateObject(
15-
wrappedValue: PinnedMessagesViewModel(channel: channel)
15+
wrappedValue: PinnedMessagesViewModel(
16+
channel: channel,
17+
channelController: channelController
18+
)
1619
)
1720
}
1821

Sources/StreamChatSwiftUI/ChatChannel/ChannelInfo/PinnedMessagesViewModel.swift

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,34 @@ public class PinnedMessagesViewModel: ObservableObject {
1212
private let channel: ChatChannel
1313

1414
@Published var pinnedMessages: [ChatMessage]
15-
16-
public init(channel: ChatChannel) {
15+
16+
private var channelController: ChatChannelController?
17+
18+
public init(channel: ChatChannel, channelController: ChatChannelController? = nil) {
1719
self.channel = channel
18-
pinnedMessages = channel.pinnedMessages
20+
if channelController != nil {
21+
pinnedMessages = []
22+
} else {
23+
pinnedMessages = channel.pinnedMessages
24+
}
25+
self.channelController = channelController
26+
loadPinnedMessages()
27+
}
28+
29+
// MARK: - private
30+
31+
private func loadPinnedMessages() {
32+
channelController?.loadPinnedMessages(completion: { [weak self] result in
33+
switch result {
34+
case let .success(messages):
35+
withAnimation {
36+
self?.pinnedMessages = messages
37+
}
38+
log.debug("Successfully loaded pinned messages")
39+
case let .failure(error):
40+
self?.pinnedMessages = self?.channel.pinnedMessages ?? []
41+
log.error("Error loading pinned messages \(error.localizedDescription)")
42+
}
43+
})
1944
}
2045
}

Sources/StreamChatSwiftUI/ChatChannel/Reactions/ReactionsOverlayView.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -281,7 +281,7 @@ public struct ReactionsOverlayView<Factory: ViewFactory>: View {
281281
messageDisplayInfo.showsMessageActions ? messageActionsSize : userReactionsPopupHeight
282282
var originY = messageDisplayInfo.frame.origin.y
283283
let minOrigin: CGFloat = 100
284-
let maxOrigin: CGFloat = screenHeight + topSafeArea - messageContainerHeight - bottomPopupOffset - minOrigin - bottomOffset
284+
let maxOrigin: CGFloat = screenHeight - messageContainerHeight - bottomPopupOffset - minOrigin - bottomOffset
285285
if originY < minOrigin {
286286
originY = minOrigin
287287
} else if originY > maxOrigin {

0 commit comments

Comments
 (0)