Skip to content

Commit 7c09caf

Browse files
Add config to skip edited label for some messages
1 parent b2d67a9 commit 7c09caf

File tree

5 files changed

+40
-3
lines changed

5 files changed

+40
-3
lines changed

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: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,32 @@ 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(skipEditedMessageLabel: { message in
63+
message.extraData[key]?.boolValue == true
64+
}))
65+
streamChat = StreamChat(chatClient: chatClient, utils: utils)
66+
let message = ChatMessage.mock(
67+
id: .unique,
68+
cid: .unique,
69+
text: "Message sent by current user",
70+
author: .mock(id: Self.currentUserId, name: "Martin"),
71+
extraData: [key: true],
72+
isSentByCurrentUser: true,
73+
textUpdatedAt: Date()
74+
)
75+
76+
// When
77+
let view = testMessageViewContainer(message: message)
78+
79+
// Then
80+
assertSnapshot(matching: view, as: .image(perceptualPrecision: precision))
81+
}
82+
5783
func test_messageContainerCurrentUserColor_snapshot() {
5884
// Given
5985
let utils = Utils(dateFormatter: EmptyDateFormatter())
Loading

0 commit comments

Comments
 (0)