Skip to content

Commit 28d2095

Browse files
Improved subtitle info in pinned messages view (#594)
1 parent 7bb436f commit 28d2095

File tree

10 files changed

+94
-4
lines changed

10 files changed

+94
-4
lines changed

CHANGELOG.md

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

66
### 🔄 Changed
7+
- Improved subtitle info in pinned messages view [#594](https://github.com/GetStream/stream-chat-swiftui/pull/594)
78

89
### 🐞 Fixed
910
- Typing users did not update reliably in the message list [#591](https://github.com/GetStream/stream-chat-swiftui/pull/591)

Sources/StreamChatSwiftUI/ChatChannel/ChannelInfo/PinnedMessagesView.swift

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ public struct PinnedMessagesView: View {
2525
ScrollView {
2626
LazyVStack(spacing: 0) {
2727
ForEach(viewModel.pinnedMessages) { message in
28-
PinnedMessageView(message: message)
28+
PinnedMessageView(message: message, channel: viewModel.channel)
2929
Divider()
3030
}
3131
}
@@ -52,6 +52,7 @@ struct PinnedMessageView: View {
5252
private let avatarSize = CGSize(width: 56, height: 56)
5353

5454
var message: ChatMessage
55+
var channel: ChatChannel
5556

5657
var body: some View {
5758
HStack {
@@ -66,7 +67,7 @@ struct PinnedMessageView: View {
6667
.foregroundColor(Color(colors.text))
6768

6869
HStack {
69-
Text(message.adjustedText)
70+
Text(pinnedMessageSubtitle)
7071
.font(fonts.footnote)
7172
.foregroundColor(Color(colors.textLowEmphasis))
7273

@@ -80,4 +81,11 @@ struct PinnedMessageView: View {
8081
}
8182
.padding(.all, 8)
8283
}
84+
85+
private var pinnedMessageSubtitle: String {
86+
if message.poll != nil {
87+
return "📊 \(L10n.Channel.Item.poll)"
88+
}
89+
return channel.attachmentPreviewText(for: message) ?? message.adjustedText
90+
}
8391
}

Sources/StreamChatSwiftUI/ChatChannel/ChannelInfo/PinnedMessagesViewModel.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ import SwiftUI
99
/// View model for the `PinnedMessagesView`.
1010
public class PinnedMessagesViewModel: ObservableObject {
1111

12-
private let channel: ChatChannel
12+
let channel: ChatChannel
1313

1414
@Published var pinnedMessages: [ChatMessage]
1515

Sources/StreamChatSwiftUI/ChatChannelList/ChatChannelListItem.swift

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -326,7 +326,7 @@ extension ChatChannel {
326326
/// The message preview text in case it contains attachments.
327327
/// - Parameter previewMessage: The preview message of the channel.
328328
/// - Returns: A string representing the message preview text.
329-
private func attachmentPreviewText(for previewMessage: ChatMessage) -> String? {
329+
func attachmentPreviewText(for previewMessage: ChatMessage) -> String? {
330330
guard let attachment = previewMessage.allAttachments.first, !previewMessage.isDeleted else {
331331
return nil
332332
}

Sources/StreamChatSwiftUI/Generated/L10n.swift

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -87,6 +87,8 @@ internal enum L10n {
8787
internal static var muted: String { L10n.tr("Localizable", "channel.item.muted") }
8888
/// Photo
8989
internal static var photo: String { L10n.tr("Localizable", "channel.item.photo") }
90+
/// Poll
91+
internal static var poll: String { L10n.tr("Localizable", "channel.item.poll") }
9092
/// %@ created:
9193
internal static func pollSomeoneCreated(_ p1: Any) -> String {
9294
return L10n.tr("Localizable", "channel.item.poll-someone-created", String(describing: p1))

Sources/StreamChatSwiftUI/Resources/en.lproj/Localizable.strings

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -196,4 +196,5 @@
196196
"channel.item.audio" = "Audio";
197197
"channel.item.photo" = "Photo";
198198
"channel.item.video" = "Video";
199+
"channel.item.poll" = "Poll";
199200
"channel.item.voice-message" = "Voice Message";

StreamChatSwiftUITests/Tests/ChatChannel/ChannelInfo/PinnedMessagesView_Tests.swift

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,84 @@ class PinnedMessagesView_Tests: StreamChatTestCase {
3030
// Then
3131
assertSnapshot(matching: view, as: .image(perceptualPrecision: precision))
3232
}
33+
34+
func test_pinnedMessagesView_imageSnapshot() {
35+
// Given
36+
let pinnedMessage = ChatMessage.mock(
37+
id: .unique,
38+
cid: .unique,
39+
text: "",
40+
author: .mock(id: .unique, name: "Test User"),
41+
attachments: ChatChannelTestHelpers.imageAttachments,
42+
pinDetails: MessagePinDetails(
43+
pinnedAt: Date(),
44+
pinnedBy: .mock(id: .unique),
45+
expiresAt: nil
46+
)
47+
)
48+
let channel = ChatChannel.mockDMChannel(
49+
pinnedMessages: [pinnedMessage]
50+
)
51+
52+
// When
53+
let view = PinnedMessagesView(channel: channel)
54+
.applyDefaultSize()
55+
56+
// Then
57+
assertSnapshot(matching: view, as: .image(perceptualPrecision: precision))
58+
}
59+
60+
func test_pinnedMessagesView_videoSnapshot() {
61+
// Given
62+
let pinnedMessage = ChatMessage.mock(
63+
id: .unique,
64+
cid: .unique,
65+
text: "",
66+
author: .mock(id: .unique, name: "Test User"),
67+
attachments: ChatChannelTestHelpers.videoAttachments,
68+
pinDetails: MessagePinDetails(
69+
pinnedAt: Date(),
70+
pinnedBy: .mock(id: .unique),
71+
expiresAt: nil
72+
)
73+
)
74+
let channel = ChatChannel.mockDMChannel(
75+
pinnedMessages: [pinnedMessage]
76+
)
77+
78+
// When
79+
let view = PinnedMessagesView(channel: channel)
80+
.applyDefaultSize()
81+
82+
// Then
83+
assertSnapshot(matching: view, as: .image(perceptualPrecision: precision))
84+
}
85+
86+
func test_pinnedMessagesView_pollSnapshot() {
87+
// Given
88+
let pinnedMessage = ChatMessage.mock(
89+
id: .unique,
90+
cid: .unique,
91+
text: "",
92+
author: .mock(id: .unique, name: "Test User"),
93+
pinDetails: MessagePinDetails(
94+
pinnedAt: Date(),
95+
pinnedBy: .mock(id: .unique),
96+
expiresAt: nil
97+
),
98+
poll: .mock()
99+
)
100+
let channel = ChatChannel.mockDMChannel(
101+
pinnedMessages: [pinnedMessage]
102+
)
103+
104+
// When
105+
let view = PinnedMessagesView(channel: channel)
106+
.applyDefaultSize()
107+
108+
// Then
109+
assertSnapshot(matching: view, as: .image(perceptualPrecision: precision))
110+
}
33111

34112
func test_pinnedMessagesView_emptySnapshot() {
35113
// Given

0 commit comments

Comments
 (0)