diff --git a/CHANGELOG.md b/CHANGELOG.md index 688c9c089..c1307a63a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -3,7 +3,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/). # Upcoming -### 🔄 Changed +### 🐞 Fixed +- Fix showing giphy message in the channel list [#669](https://github.com/GetStream/stream-chat-swiftui/pull/669) # [4.67.0](https://github.com/GetStream/stream-chat-swiftui/releases/tag/4.67.0) _November 25, 2024_ diff --git a/Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelListItem.swift b/Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelListItem.swift index a2cf7af0b..2da9efbb7 100644 --- a/Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelListItem.swift +++ b/Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelListItem.swift @@ -269,6 +269,12 @@ public struct InjectedChannelInfo { extension ChatChannel { + public var previewMessageText: String? { + guard let previewMessage else { return nil } + let messageFormatter = InjectedValues[\.utils].messagePreviewFormatter + return messageFormatter.format(previewMessage) + } + public var lastMessageText: String? { guard let latestMessage = latestMessages.first else { return nil } let messageFormatter = InjectedValues[\.utils].messagePreviewFormatter @@ -293,8 +299,8 @@ extension ChatChannel { return L10n.Channel.Item.muted } else if shouldShowTypingIndicator { return typingIndicatorString(currentUserId: InjectedValues[\.chatClient].currentUserId) - } else if let lastMessageText = lastMessageText { - return lastMessageText + } else if let previewMessageText { + return previewMessageText } else { return L10n.Channel.Item.emptyMessages } diff --git a/StreamChatSwiftUITests/Tests/ChatChannelList/ChatChannelListItemView_Tests.swift b/StreamChatSwiftUITests/Tests/ChatChannelList/ChatChannelListItemView_Tests.swift index 8f908d0b3..e272d2bc0 100644 --- a/StreamChatSwiftUITests/Tests/ChatChannelList/ChatChannelListItemView_Tests.swift +++ b/StreamChatSwiftUITests/Tests/ChatChannelList/ChatChannelListItemView_Tests.swift @@ -23,7 +23,7 @@ final class ChatChannelListItemView_Tests: StreamChatTestCase { func test_channelListItem_audioMessage() throws { // Given let message = try mockAudioMessage(text: "Audio", isSentByCurrentUser: true) - let channel = ChatChannel.mock(cid: .unique, latestMessages: [message]) + let channel = ChatChannel.mock(cid: .unique, latestMessages: [message], previewMessage: message) // When let view = ChatChannelListItem( @@ -42,7 +42,7 @@ final class ChatChannelListItemView_Tests: StreamChatTestCase { func test_channelListItem_imageMessage() throws { // Given let message = try mockImageMessage(text: "Image", isSentByCurrentUser: true) - let channel = ChatChannel.mock(cid: .unique, latestMessages: [message]) + let channel = ChatChannel.mock(cid: .unique, latestMessages: [message], previewMessage: message) // When let view = ChatChannelListItem( @@ -61,7 +61,7 @@ final class ChatChannelListItemView_Tests: StreamChatTestCase { func test_channelListItem_videoMessage() throws { // Given let message = try mockVideoMessage(text: "Video", isSentByCurrentUser: true) - let channel = ChatChannel.mock(cid: .unique, latestMessages: [message]) + let channel = ChatChannel.mock(cid: .unique, latestMessages: [message], previewMessage: message) // When let view = ChatChannelListItem( @@ -80,7 +80,7 @@ final class ChatChannelListItemView_Tests: StreamChatTestCase { func test_channelListItem_fileMessage() throws { // Given let message = try mockFileMessage(title: "Filename", text: "File", isSentByCurrentUser: true) - let channel = ChatChannel.mock(cid: .unique, latestMessages: [message]) + let channel = ChatChannel.mock(cid: .unique, latestMessages: [message], previewMessage: message) // When let view = ChatChannelListItem( @@ -96,10 +96,11 @@ final class ChatChannelListItemView_Tests: StreamChatTestCase { assertSnapshot(matching: view, as: .image(perceptualPrecision: precision)) } - func test_channelListItem_giphyMessage() throws { + func test_channelListItem_giphyMessageLatestButPreviewIsAnotherMessage() throws { // Given - let message = try mockGiphyMessage(text: "Giphy", isSentByCurrentUser: true) - let channel = ChatChannel.mock(cid: .unique, latestMessages: [message]) + let previewMessage = try mockImageMessage(text: "Hi!", isSentByCurrentUser: true) + let latestMessage = try mockGiphyMessage(text: "Giphy", isSentByCurrentUser: true) + let channel = ChatChannel.mock(cid: .unique, latestMessages: [latestMessage], previewMessage: previewMessage) // When let view = ChatChannelListItem( @@ -118,7 +119,7 @@ final class ChatChannelListItemView_Tests: StreamChatTestCase { func test_channelListItem_pollMessage_youCreated() throws { // Given let message = try mockPollMessage(isSentByCurrentUser: true) - let channel = ChatChannel.mock(cid: .unique, latestMessages: [message]) + let channel = ChatChannel.mock(cid: .unique, latestMessages: [message], previewMessage: message) // When let view = ChatChannelListItem( @@ -137,7 +138,7 @@ final class ChatChannelListItemView_Tests: StreamChatTestCase { func test_channelListItem_pollMessage_someoneCreated() throws { // Given let message = try mockPollMessage(isSentByCurrentUser: false) - let channel = ChatChannel.mock(cid: .unique, latestMessages: [message]) + let channel = ChatChannel.mock(cid: .unique, latestMessages: [message], previewMessage: message) // When let view = ChatChannelListItem( @@ -161,7 +162,7 @@ final class ChatChannelListItemView_Tests: StreamChatTestCase { .unique, .unique ]) - let channel = ChatChannel.mock(cid: .unique, membership: .mock(id: currentUserId), latestMessages: [message]) + let channel = ChatChannel.mock(cid: .unique, membership: .mock(id: currentUserId), previewMessage: message) // When let view = ChatChannelListItem( @@ -185,7 +186,7 @@ final class ChatChannelListItemView_Tests: StreamChatTestCase { .unique, .mock(pollId: .unique, optionId: .unique, user: .mock(id: currentUserId)) ]) - let channel = ChatChannel.mock(cid: .unique, membership: .mock(id: currentUserId), latestMessages: [message]) + let channel = ChatChannel.mock(cid: .unique, membership: .mock(id: currentUserId), previewMessage: message) // When let view = ChatChannelListItem( diff --git a/StreamChatSwiftUITests/Tests/ChatChannelList/__Snapshots__/ChatChannelListItemView_Tests/test_channelListItem_giphyMessage.1.png b/StreamChatSwiftUITests/Tests/ChatChannelList/__Snapshots__/ChatChannelListItemView_Tests/test_channelListItem_giphyMessage.1.png deleted file mode 100644 index a4e86ff46..000000000 Binary files a/StreamChatSwiftUITests/Tests/ChatChannelList/__Snapshots__/ChatChannelListItemView_Tests/test_channelListItem_giphyMessage.1.png and /dev/null differ diff --git a/StreamChatSwiftUITests/Tests/ChatChannelList/__Snapshots__/ChatChannelListItemView_Tests/test_channelListItem_giphyMessageLatestButPreviewIsAnotherMessage.1.png b/StreamChatSwiftUITests/Tests/ChatChannelList/__Snapshots__/ChatChannelListItemView_Tests/test_channelListItem_giphyMessageLatestButPreviewIsAnotherMessage.1.png new file mode 100644 index 000000000..804db36fb Binary files /dev/null and b/StreamChatSwiftUITests/Tests/ChatChannelList/__Snapshots__/ChatChannelListItemView_Tests/test_channelListItem_giphyMessageLatestButPreviewIsAnotherMessage.1.png differ