Skip to content

Commit 176230b

Browse files
Updated the modifier applied to the message view
1 parent 2741e48 commit 176230b

File tree

11 files changed

+138
-32
lines changed

11 files changed

+138
-32
lines changed

Sources/StreamChatSwiftUI/ChatChannel/MessageList/FileAttachmentView.swift

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -54,8 +54,14 @@ public struct FileAttachmentsContainer<Factory: ViewFactory>: View {
5454
}
5555
.padding(.all, 4)
5656
}
57-
.modifier(factory.makeMessageViewModifier())
58-
.messageBubble(for: message, isFirst: isFirst)
57+
.modifier(
58+
factory.makeMessageViewModifier(
59+
for: MessageModifierInfo(
60+
message: message,
61+
isFirst: isFirst
62+
)
63+
)
64+
)
5965
}
6066
}
6167

Sources/StreamChatSwiftUI/ChatChannel/MessageList/ImageAttachmentView.swift

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -57,8 +57,13 @@ public struct ImageAttachmentContainer<Factory: ViewFactory>: View {
5757
}
5858
}
5959
}
60-
.modifier(factory.makeMessageViewModifier())
61-
.messageBubble(for: message, isFirst: isFirst)
60+
.modifier(
61+
factory.makeMessageViewModifier(
62+
for: MessageModifierInfo(
63+
message: message, isFirst: isFirst
64+
)
65+
)
66+
)
6267
.fullScreenCover(isPresented: $galleryShown, onDismiss: {
6368
self.selectedIndex = 0
6469
}) {

Sources/StreamChatSwiftUI/ChatChannel/MessageList/LinkAttachmentView.swift

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,11 +53,14 @@ public struct LinkAttachmentContainer<Factory: ViewFactory>: View {
5353
}
5454
}
5555
.padding(.bottom, 8)
56-
.modifier(factory.makeMessageViewModifier())
57-
.messageBubble(
58-
for: message,
59-
isFirst: isFirst,
60-
backgroundColor: colors.highlightedAccentBackground1
56+
.modifier(
57+
factory.makeMessageViewModifier(
58+
for: MessageModifierInfo(
59+
message: message,
60+
isFirst: isFirst,
61+
injectedBackgroundColor: colors.highlightedAccentBackground1
62+
)
63+
)
6164
)
6265
}
6366
}

Sources/StreamChatSwiftUI/ChatChannel/MessageList/MessageBubble.swift

Lines changed: 43 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,53 @@
55
import StreamChat
66
import SwiftUI
77

8+
/// Contains info needed for a modifier to be applied to the message view.
9+
public struct MessageModifierInfo {
10+
11+
public var message: ChatMessage
12+
public var isFirst: Bool
13+
public var injectedBackgroundColor: UIColor?
14+
public var cornerRadius: CGFloat = 18
15+
public var forceLeftToRight = false
16+
17+
public init(
18+
message: ChatMessage,
19+
isFirst: Bool,
20+
injectedBackgroundColor: UIColor? = nil,
21+
cornerRadius: CGFloat = 18,
22+
forceLeftToRight: Bool = false
23+
) {
24+
self.message = message
25+
self.isFirst = isFirst
26+
self.injectedBackgroundColor = injectedBackgroundColor
27+
self.cornerRadius = cornerRadius
28+
self.forceLeftToRight = forceLeftToRight
29+
}
30+
}
31+
832
/// Modifier that enables message bubble container.
933
public struct MessageBubbleModifier: ViewModifier {
1034
@Injected(\.colors) private var colors
1135

12-
var message: ChatMessage
13-
var isFirst: Bool
14-
var injectedBackgroundColor: UIColor?
15-
var cornerRadius: CGFloat = 18
16-
var forceLeftToRight = false
36+
public var message: ChatMessage
37+
public var isFirst: Bool
38+
public var injectedBackgroundColor: UIColor?
39+
public var cornerRadius: CGFloat = 18
40+
public var forceLeftToRight = false
41+
42+
public init(
43+
message: ChatMessage,
44+
isFirst: Bool,
45+
injectedBackgroundColor: UIColor? = nil,
46+
cornerRadius: CGFloat = 18,
47+
forceLeftToRight: Bool = false
48+
) {
49+
self.message = message
50+
self.isFirst = isFirst
51+
self.injectedBackgroundColor = injectedBackgroundColor
52+
self.cornerRadius = cornerRadius
53+
self.forceLeftToRight = forceLeftToRight
54+
}
1755

1856
public func body(content: Content) -> some View {
1957
content

Sources/StreamChatSwiftUI/ChatChannel/MessageList/MessageView.swift

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -128,8 +128,14 @@ public struct MessageTextView<Factory: ViewFactory>: View {
128128
.foregroundColor(textColor(for: message))
129129
.font(fonts.body)
130130
}
131-
.modifier(factory.makeMessageViewModifier())
132-
.messageBubble(for: message, isFirst: isFirst)
131+
.modifier(
132+
factory.makeMessageViewModifier(
133+
for: MessageModifierInfo(
134+
message: message,
135+
isFirst: isFirst
136+
)
137+
)
138+
)
133139
}
134140
}
135141

@@ -156,8 +162,14 @@ public struct EmojiTextView<Factory: ViewFactory>: View {
156162
Text(message.text)
157163
.font(fonts.emoji)
158164
}
159-
.modifier(factory.makeMessageViewModifier())
160-
.messageBubble(for: message, isFirst: isFirst)
165+
.modifier(
166+
factory.makeMessageViewModifier(
167+
for: MessageModifierInfo(
168+
message: message,
169+
isFirst: isFirst
170+
)
171+
)
172+
)
161173
} else {
162174
Text(message.text)
163175
.font(fonts.emoji)

Sources/StreamChatSwiftUI/ChatChannel/MessageList/QuotedMessageView.swift

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -131,13 +131,16 @@ public struct QuotedMessageView<Factory: ViewFactory>: View {
131131
}
132132
.id(quotedMessage.messageId)
133133
.padding(.all, 8)
134-
.modifier(factory.makeMessageViewModifier())
135-
.messageBubble(
136-
for: quotedMessage,
137-
isFirst: true,
138-
backgroundColor: bubbleBackground,
139-
cornerRadius: 12,
140-
forceLeftToRight: forceLeftToRight
134+
.modifier(
135+
factory.makeMessageViewModifier(
136+
for: MessageModifierInfo(
137+
message: quotedMessage,
138+
isFirst: true,
139+
injectedBackgroundColor: bubbleBackground,
140+
cornerRadius: 12,
141+
forceLeftToRight: forceLeftToRight
142+
)
143+
)
141144
)
142145
}
143146

Sources/StreamChatSwiftUI/ChatChannel/MessageList/VideoAttachmentView.swift

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,14 @@ public struct VideoAttachmentsContainer<Factory: ViewFactory>: View {
3131
width: width
3232
)
3333
}
34-
.modifier(factory.makeMessageViewModifier())
35-
.messageBubble(for: message, isFirst: false)
34+
.modifier(
35+
factory.makeMessageViewModifier(
36+
for: MessageModifierInfo(
37+
message: message,
38+
isFirst: false
39+
)
40+
)
41+
)
3642
} else {
3743
VideoAttachmentsList(
3844
message: message,

Sources/StreamChatSwiftUI/DefaultViewFactory.swift

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -204,8 +204,14 @@ extension ViewFactory {
204204
EmptyViewModifier()
205205
}
206206

207-
public func makeMessageViewModifier() -> some ViewModifier {
208-
EmptyViewModifier()
207+
public func makeMessageViewModifier(for messageModifierInfo: MessageModifierInfo) -> some ViewModifier {
208+
MessageBubbleModifier(
209+
message: messageModifierInfo.message,
210+
isFirst: messageModifierInfo.isFirst,
211+
injectedBackgroundColor: messageModifierInfo.injectedBackgroundColor,
212+
cornerRadius: messageModifierInfo.cornerRadius,
213+
forceLeftToRight: messageModifierInfo.forceLeftToRight
214+
)
209215
}
210216

211217
public func makeMessageAvatarView(for userDisplayInfo: UserDisplayInfo) -> some View {

Sources/StreamChatSwiftUI/ViewFactory.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,8 @@ public protocol ViewFactory: AnyObject {
188188

189189
associatedtype MessageViewModifier: ViewModifier
190190
/// Returns a view modifier applied to the message view.
191-
func makeMessageViewModifier() -> MessageViewModifier
191+
/// - Parameter messageModifierInfo: the message modifier info, that will be applied to the message.
192+
func makeMessageViewModifier(for messageModifierInfo: MessageModifierInfo) -> MessageViewModifier
192193

193194
associatedtype UserAvatar: View
194195
/// Creates the message avatar view.

StreamChatSwiftUITests/Tests/Utils/ViewFactory_Tests.swift

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -624,10 +624,15 @@ class ViewFactory_Tests: StreamChatTestCase {
624624
let viewFactory = DefaultViewFactory.shared
625625

626626
// When
627-
let modifier = viewFactory.makeMessageViewModifier()
627+
let modifier = viewFactory.makeMessageViewModifier(
628+
for: MessageModifierInfo(
629+
message: message,
630+
isFirst: false
631+
)
632+
)
628633

629634
// Then
630-
XCTAssert(modifier is EmptyViewModifier)
635+
XCTAssert(modifier is MessageBubbleModifier)
631636
}
632637
}
633638

0 commit comments

Comments
 (0)