Skip to content

Commit ced3f6e

Browse files
Updated creation of quoted messages
1 parent 1dbbc59 commit ced3f6e

File tree

12 files changed

+79
-44
lines changed

12 files changed

+79
-44
lines changed

Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerView.swift

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -211,8 +211,11 @@ public struct ComposerInputView<Factory: ViewFactory>: View {
211211
public var body: some View {
212212
VStack {
213213
if let quotedMessage = quotedMessage.wrappedValue {
214-
factory.makeQuotedMessageComposerView(
215-
quotedMessage: quotedMessage
214+
factory.makeQuotedMessageView(
215+
quotedMessage: quotedMessage,
216+
fillAvailableSpace: true,
217+
isInComposer: true,
218+
scrolledId: .constant(nil)
216219
)
217220
}
218221

Sources/StreamChatSwiftUI/ChatChannel/MessageList/FileAttachmentView.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,10 @@ public struct FileAttachmentsContainer<Factory: ViewFactory>: View {
1818
public var body: some View {
1919
VStack(alignment: message.alignmentInBubble) {
2020
if let quotedMessage = utils.messageCachingUtils.quotedMessage(for: message) {
21-
QuotedMessageViewContainer(
22-
factory: factory,
21+
factory.makeQuotedMessageView(
2322
quotedMessage: quotedMessage,
2423
fillAvailableSpace: !message.attachmentCounts.isEmpty,
24+
isInComposer: false,
2525
scrolledId: $scrolledId
2626
)
2727
}

Sources/StreamChatSwiftUI/ChatChannel/MessageList/GiphyAttachmentView.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@ public struct GiphyAttachmentView<Factory: ViewFactory>: View {
2727
spacing: 0
2828
) {
2929
if let quotedMessage = utils.messageCachingUtils.quotedMessage(for: message) {
30-
QuotedMessageViewContainer(
31-
factory: factory,
30+
factory.makeQuotedMessageView(
3231
quotedMessage: quotedMessage,
3332
fillAvailableSpace: !message.attachmentCounts.isEmpty,
33+
isInComposer: false,
3434
scrolledId: $scrolledId
3535
)
3636
}

Sources/StreamChatSwiftUI/ChatChannel/MessageList/ImageAttachmentView.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,10 +26,10 @@ public struct ImageAttachmentContainer<Factory: ViewFactory>: View {
2626
spacing: 0
2727
) {
2828
if let quotedMessage = utils.messageCachingUtils.quotedMessage(for: message) {
29-
QuotedMessageViewContainer(
30-
factory: factory,
29+
factory.makeQuotedMessageView(
3130
quotedMessage: quotedMessage,
3231
fillAvailableSpace: !message.attachmentCounts.isEmpty,
32+
isInComposer: false,
3333
scrolledId: $scrolledId
3434
)
3535
}

Sources/StreamChatSwiftUI/ChatChannel/MessageList/LinkAttachmentView.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,10 +27,10 @@ public struct LinkAttachmentContainer<Factory: ViewFactory>: View {
2727
spacing: 0
2828
) {
2929
if let quotedMessage = utils.messageCachingUtils.quotedMessage(for: message) {
30-
QuotedMessageViewContainer(
31-
factory: factory,
30+
factory.makeQuotedMessageView(
3231
quotedMessage: quotedMessage,
3332
fillAvailableSpace: !message.attachmentCounts.isEmpty,
33+
isInComposer: false,
3434
scrolledId: $scrolledId
3535
)
3636
}

Sources/StreamChatSwiftUI/ChatChannel/MessageList/MessageView.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -115,10 +115,10 @@ public struct MessageTextView<Factory: ViewFactory>: View {
115115
spacing: 0
116116
) {
117117
if let quotedMessage = utils.messageCachingUtils.quotedMessage(for: message) {
118-
QuotedMessageViewContainer(
119-
factory: factory,
118+
factory.makeQuotedMessageView(
120119
quotedMessage: quotedMessage,
121120
fillAvailableSpace: !message.attachmentCounts.isEmpty,
121+
isInComposer: false,
122122
scrolledId: $scrolledId
123123
)
124124
}
@@ -145,10 +145,10 @@ public struct EmojiTextView<Factory: ViewFactory>: View {
145145
ZStack {
146146
if let quotedMessage = utils.messageCachingUtils.quotedMessage(for: message) {
147147
VStack(spacing: 0) {
148-
QuotedMessageViewContainer(
149-
factory: factory,
148+
factory.makeQuotedMessageView(
150149
quotedMessage: quotedMessage,
151150
fillAvailableSpace: !message.attachmentCounts.isEmpty,
151+
isInComposer: false,
152152
scrolledId: $scrolledId
153153
)
154154

Sources/StreamChatSwiftUI/ChatChannel/MessageList/QuotedMessageView.swift

Lines changed: 16 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -54,19 +54,29 @@ struct QuotedMessageViewContainer<Factory: ViewFactory>: View {
5454
}
5555

5656
/// View for the quoted message.
57-
struct QuotedMessageView: View {
58-
57+
public struct QuotedMessageView: View {
58+
5959
@Injected(\.images) private var images
6060
@Injected(\.fonts) private var fonts
6161
@Injected(\.colors) private var colors
6262

6363
private let attachmentWidth: CGFloat = 36
6464

65-
var quotedMessage: ChatMessage
66-
var fillAvailableSpace: Bool
67-
var forceLeftToRight: Bool
65+
public var quotedMessage: ChatMessage
66+
public var fillAvailableSpace: Bool
67+
public var forceLeftToRight: Bool
6868

69-
var body: some View {
69+
public init(
70+
quotedMessage: ChatMessage,
71+
fillAvailableSpace: Bool,
72+
forceLeftToRight: Bool
73+
) {
74+
self.quotedMessage = quotedMessage
75+
self.fillAvailableSpace = fillAvailableSpace
76+
self.forceLeftToRight = forceLeftToRight
77+
}
78+
79+
public var body: some View {
7080
HStack(alignment: .top) {
7181
if !quotedMessage.attachmentCounts.isEmpty {
7282
ZStack {

Sources/StreamChatSwiftUI/ChatChannel/MessageList/VideoAttachmentView.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,10 @@ public struct VideoAttachmentsContainer<Factory: ViewFactory>: View {
1919
VStack {
2020
if let quotedMessage = utils.messageCachingUtils.quotedMessage(for: message) {
2121
VStack {
22-
QuotedMessageViewContainer(
23-
factory: factory,
22+
factory.makeQuotedMessageView(
2423
quotedMessage: quotedMessage,
2524
fillAvailableSpace: !message.attachmentCounts.isEmpty,
25+
isInComposer: false,
2626
scrolledId: $scrolledId
2727
)
2828

Sources/StreamChatSwiftUI/DefaultViewFactory.swift

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -680,15 +680,18 @@ extension ViewFactory {
680680
QuotedMessageHeaderView(quotedMessage: quotedMessage)
681681
}
682682

683-
public func makeQuotedMessageComposerView(
684-
quotedMessage: ChatMessage
683+
public func makeQuotedMessageView(
684+
quotedMessage: ChatMessage,
685+
fillAvailableSpace: Bool,
686+
isInComposer: Bool,
687+
scrolledId: Binding<String?>
685688
) -> some View {
686689
QuotedMessageViewContainer(
687690
factory: self,
688691
quotedMessage: quotedMessage,
689-
fillAvailableSpace: true,
690-
forceLeftToRight: true,
691-
scrolledId: .constant(nil)
692+
fillAvailableSpace: fillAvailableSpace,
693+
forceLeftToRight: isInComposer,
694+
scrolledId: scrolledId
692695
)
693696
}
694697

Sources/StreamChatSwiftUI/ViewFactory.swift

Lines changed: 13 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -667,12 +667,19 @@ public protocol ViewFactory: AnyObject {
667667
quotedMessage: Binding<ChatMessage?>
668668
) -> QuotedMessageHeaderViewType
669669

670-
associatedtype QuotedMessageComposerViewType: View
671-
/// Creates the quoted message shown in a composer view.
672-
/// - Parameter quotedMessage: the quoted message shown in the composer input.
673-
func makeQuotedMessageComposerView(
674-
quotedMessage: ChatMessage
675-
) -> QuotedMessageComposerViewType
670+
associatedtype QuotedMessageViewType: View
671+
/// Creates the quoted message view, shown in the message list and the composer.
672+
/// - Parameters:
673+
/// - quotedMessage: the quoted message.
674+
/// - fillAvailableSpace: whether the quoted container should take all the available space.
675+
/// - isInComposer: whether the quoted message is shown in the composer.
676+
/// - scrolledId: binding of the scroll id, use it to scroll to the original message.
677+
func makeQuotedMessageView(
678+
quotedMessage: ChatMessage,
679+
fillAvailableSpace: Bool,
680+
isInComposer: Bool,
681+
scrolledId: Binding<String?>
682+
) -> QuotedMessageViewType
676683

677684
associatedtype EditedMessageHeaderViewType: View
678685
/// Creates the edited message header view in the composer.

0 commit comments

Comments
 (0)