Skip to content

Commit 9e831cc

Browse files
Add config to skip edited label for some messages (#660)
1 parent b2d67a9 commit 9e831cc

File tree

6 files changed

+44
-3
lines changed

6 files changed

+44
-3
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
1010
### 🔄 Changed
1111
- Message composer now uses `.uploadFile` capability when showing attachment picker icon [#646](https://github.com/GetStream/stream-chat-swiftui/pull/646)
1212
- `ChannelInfoView` now uses `.updateChannelMembers` capability to show "Add Users" button [#651](https://github.com/GetStream/stream-chat-swiftui/pull/651)
13+
- Add config to skip edited label for some messages [#660](https://github.com/GetStream/stream-chat-swiftui/pull/660)
1314

1415
# [4.66.0](https://github.com/GetStream/stream-chat-swiftui/releases/tag/4.66.0)
1516
_November 06, 2024_

DemoAppSwiftUI/AppDelegate.swift

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,13 @@ class AppDelegate: NSObject, UIApplicationDelegate {
6363
#endif
6464

6565
let utils = Utils(
66-
messageListConfig: MessageListConfig(dateIndicatorPlacement: .messageList, userBlockingEnabled: true),
66+
messageListConfig: MessageListConfig(
67+
dateIndicatorPlacement: .messageList,
68+
userBlockingEnabled: true,
69+
skipEditedMessageLabel: { message in
70+
message.extraData["ai_generated"]?.boolValue == true
71+
}
72+
),
6773
composerConfig: ComposerConfig(isVoiceRecordingEnabled: true)
6874
)
6975
streamChat = StreamChat(chatClient: chatClient, utils: utils)

Sources/StreamChatSwiftUI/ChatChannel/MessageList/MessageListConfig.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ public struct MessageListConfig {
3131
localLinkDetectionEnabled: Bool = true,
3232
isMessageEditedLabelEnabled: Bool = true,
3333
markdownSupportEnabled: Bool = true,
34-
userBlockingEnabled: Bool = false
34+
userBlockingEnabled: Bool = false,
35+
skipEditedMessageLabel: @escaping (ChatMessage) -> Bool = { _ in false }
3536
) {
3637
self.messageListType = messageListType
3738
self.typingIndicatorPlacement = typingIndicatorPlacement
@@ -56,6 +57,7 @@ public struct MessageListConfig {
5657
self.isMessageEditedLabelEnabled = isMessageEditedLabelEnabled
5758
self.markdownSupportEnabled = markdownSupportEnabled
5859
self.userBlockingEnabled = userBlockingEnabled
60+
self.skipEditedMessageLabel = skipEditedMessageLabel
5961
}
6062

6163
public let messageListType: MessageListType
@@ -81,6 +83,7 @@ public struct MessageListConfig {
8183
public let isMessageEditedLabelEnabled: Bool
8284
public let markdownSupportEnabled: Bool
8385
public let userBlockingEnabled: Bool
86+
public let skipEditedMessageLabel: (ChatMessage) -> Bool
8487
}
8588

8689
/// Contains information about the message paddings.

Sources/StreamChatSwiftUI/ChatChannel/MessageList/MessageListHelperViews.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,9 @@ struct MessageDateView: View {
6666

6767
var text: String {
6868
var text = dateFormatter.string(from: message.createdAt)
69-
let showMessageEditedLabel = utils.messageListConfig.isMessageEditedLabelEnabled
69+
let messageListConfig = utils.messageListConfig
70+
let showMessageEditedLabel = messageListConfig.isMessageEditedLabelEnabled
71+
&& !messageListConfig.skipEditedMessageLabel(message)
7072
&& message.textUpdatedAt != nil
7173
&& !message.isDeleted
7274
if showMessageEditedLabel {

StreamChatSwiftUITests/Tests/ChatChannel/MessageContainerView_Tests.swift

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,35 @@ class MessageContainerView_Tests: StreamChatTestCase {
5454
assertSnapshot(matching: view, as: .image(perceptualPrecision: precision))
5555
}
5656

57+
func test_messageContainerEditedAIGenerated_snapshot() {
58+
// Given
59+
let key = "ai_generated"
60+
let utils = Utils(
61+
dateFormatter: EmptyDateFormatter(),
62+
messageListConfig: .init(
63+
skipEditedMessageLabel: { message in
64+
message.extraData[key]?.boolValue == true
65+
}
66+
)
67+
)
68+
streamChat = StreamChat(chatClient: chatClient, utils: utils)
69+
let message = ChatMessage.mock(
70+
id: .unique,
71+
cid: .unique,
72+
text: "Message sent by current user",
73+
author: .mock(id: Self.currentUserId, name: "Martin"),
74+
extraData: [key: true],
75+
isSentByCurrentUser: true,
76+
textUpdatedAt: Date()
77+
)
78+
79+
// When
80+
let view = testMessageViewContainer(message: message)
81+
82+
// Then
83+
assertSnapshot(matching: view, as: .image(perceptualPrecision: precision))
84+
}
85+
5786
func test_messageContainerCurrentUserColor_snapshot() {
5887
// Given
5988
let utils = Utils(dateFormatter: EmptyDateFormatter())
Loading

0 commit comments

Comments
 (0)