Skip to content

Commit 84284d2

Browse files
implemented scrolling to quoted message
1 parent c254567 commit 84284d2

19 files changed

+124
-53
lines changed

Sources/StreamChatSwiftUI/ChatChannel/Composer/MessageComposerView.swift

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -161,7 +161,8 @@ public struct ComposerInputView<Factory: ViewFactory>: View {
161161
QuotedMessageViewContainer(
162162
quotedMessage: quotedMessage,
163163
fillAvailableSpace: true,
164-
forceLeftToRight: true
164+
forceLeftToRight: true,
165+
scrolledId: .constant(nil)
165166
)
166167
}
167168

Sources/StreamChatSwiftUI/ChatChannel/MessageList/FileAttachmentView.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,13 +9,15 @@ public struct FileAttachmentsContainer: View {
99
var message: ChatMessage
1010
var width: CGFloat
1111
var isFirst: Bool
12+
@Binding var scrolledId: String?
1213

1314
public var body: some View {
1415
VStack(alignment: message.alignmentInBubble) {
1516
if let quotedMessage = message.quotedMessage {
1617
QuotedMessageViewContainer(
1718
quotedMessage: quotedMessage,
18-
fillAvailableSpace: !message.attachmentCounts.isEmpty
19+
fillAvailableSpace: !message.attachmentCounts.isEmpty,
20+
scrolledId: $scrolledId
1921
)
2022
}
2123

Sources/StreamChatSwiftUI/ChatChannel/MessageList/GiphyAttachmentView.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ public struct GiphyAttachmentView: View {
1212
let message: ChatMessage
1313
let width: CGFloat
1414
let isFirst: Bool
15+
@Binding var scrolledId: String?
1516

1617
public var body: some View {
1718
VStack(
@@ -21,7 +22,8 @@ public struct GiphyAttachmentView: View {
2122
if let quotedMessage = message.quotedMessage {
2223
QuotedMessageViewContainer(
2324
quotedMessage: quotedMessage,
24-
fillAvailableSpace: !message.attachmentCounts.isEmpty
25+
fillAvailableSpace: !message.attachmentCounts.isEmpty,
26+
scrolledId: $scrolledId
2527
)
2628
}
2729

Sources/StreamChatSwiftUI/ChatChannel/MessageList/ImageAttachmentView.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ public struct ImageAttachmentContainer: View {
1313
let message: ChatMessage
1414
let width: CGFloat
1515
let isFirst: Bool
16+
@Binding var scrolledId: String?
1617

1718
public var body: some View {
1819
VStack(
@@ -22,7 +23,8 @@ public struct ImageAttachmentContainer: View {
2223
if let quotedMessage = message.quotedMessage {
2324
QuotedMessageViewContainer(
2425
quotedMessage: quotedMessage,
25-
fillAvailableSpace: !message.attachmentCounts.isEmpty
26+
fillAvailableSpace: !message.attachmentCounts.isEmpty,
27+
scrolledId: $scrolledId
2628
)
2729
}
2830

Sources/StreamChatSwiftUI/ChatChannel/MessageList/LinkAttachmentView.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ public struct LinkAttachmentContainer: View {
1515
var message: ChatMessage
1616
var width: CGFloat
1717
var isFirst: Bool
18+
@Binding var scrolledId: String?
1819

1920
private let padding: CGFloat = 8
2021

@@ -26,7 +27,8 @@ public struct LinkAttachmentContainer: View {
2627
if let quotedMessage = message.quotedMessage {
2728
QuotedMessageViewContainer(
2829
quotedMessage: quotedMessage,
29-
fillAvailableSpace: !message.attachmentCounts.isEmpty
30+
fillAvailableSpace: !message.attachmentCounts.isEmpty,
31+
scrolledId: $scrolledId
3032
)
3133
}
3234

Sources/StreamChatSwiftUI/ChatChannel/MessageList/MessageContainerView.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@ struct MessageContainerView<Factory: ViewFactory>: View {
1919
var width: CGFloat?
2020
var showsAllInfo: Bool
2121
var isInThread: Bool
22+
@Binding var scrolledId: String?
2223
var onLongPress: (MessageDisplayInfo) -> Void
2324

2425
@State private var frame: CGRect = .zero
@@ -45,7 +46,8 @@ struct MessageContainerView<Factory: ViewFactory>: View {
4546
factory: factory,
4647
message: message,
4748
contentWidth: contentWidth,
48-
isFirst: showsAllInfo
49+
isFirst: showsAllInfo,
50+
scrolledId: $scrolledId
4951
)
5052
.overlay(
5153
reactionsShown ?

Sources/StreamChatSwiftUI/ChatChannel/MessageList/MessageListView.swift

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ struct MessageListView<Factory: ViewFactory>: View, KeyboardReadable {
5959
width: width,
6060
showsAllInfo: showsAllData(for: message),
6161
isInThread: isMessageThread,
62+
scrolledId: $scrolledId,
6263
onLongPress: { messageDisplayInfo in
6364
if keyboardShown {
6465
resignFirstResponder()

Sources/StreamChatSwiftUI/ChatChannel/MessageList/MessageView.swift

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ struct MessageView<Factory: ViewFactory>: View {
1616
var message: ChatMessage
1717
var contentWidth: CGFloat
1818
var isFirst: Bool
19+
@Binding var scrolledId: String?
1920

2021
var body: some View {
2122
VStack {
@@ -36,23 +37,26 @@ struct MessageView<Factory: ViewFactory>: View {
3637
factory.makeLinkAttachmentView(
3738
for: message,
3839
isFirst: isFirst,
39-
availableWidth: contentWidth
40+
availableWidth: contentWidth,
41+
scrolledId: $scrolledId
4042
)
4143
}
4244

4345
if messageTypeResolver.hasFileAttachment(message: message) {
4446
factory.makeFileAttachmentView(
4547
for: message,
4648
isFirst: isFirst,
47-
availableWidth: contentWidth
49+
availableWidth: contentWidth,
50+
scrolledId: $scrolledId
4851
)
4952
}
5053

5154
if messageTypeResolver.hasImageAttachment(message: message) {
5255
factory.makeImageAttachmentView(
5356
for: message,
5457
isFirst: isFirst,
55-
availableWidth: contentWidth
58+
availableWidth: contentWidth,
59+
scrolledId: $scrolledId
5660
)
5761
}
5862

@@ -61,7 +65,8 @@ struct MessageView<Factory: ViewFactory>: View {
6165
factory.makeGiphyAttachmentView(
6266
for: message,
6367
isFirst: isFirst,
64-
availableWidth: contentWidth
68+
availableWidth: contentWidth,
69+
scrolledId: $scrolledId
6570
)
6671
factory.makeGiphyBadgeViewType(
6772
for: message,
@@ -74,7 +79,8 @@ struct MessageView<Factory: ViewFactory>: View {
7479
factory.makeVideoAttachmentView(
7580
for: message,
7681
isFirst: isFirst,
77-
availableWidth: contentWidth
82+
availableWidth: contentWidth,
83+
scrolledId: $scrolledId
7884
)
7985
}
8086
} else {
@@ -84,7 +90,8 @@ struct MessageView<Factory: ViewFactory>: View {
8490
factory.makeMessageTextView(
8591
for: message,
8692
isFirst: isFirst,
87-
availableWidth: contentWidth
93+
availableWidth: contentWidth,
94+
scrolledId: $scrolledId
8895
)
8996
}
9097
}
@@ -98,6 +105,7 @@ public struct MessageTextView: View {
98105

99106
var message: ChatMessage
100107
var isFirst: Bool
108+
@Binding var scrolledId: String?
101109

102110
public var body: some View {
103111
VStack(
@@ -107,7 +115,8 @@ public struct MessageTextView: View {
107115
if let quotedMessage = message.quotedMessage {
108116
QuotedMessageViewContainer(
109117
quotedMessage: quotedMessage,
110-
fillAvailableSpace: !message.attachmentCounts.isEmpty
118+
fillAvailableSpace: !message.attachmentCounts.isEmpty,
119+
scrolledId: $scrolledId
111120
)
112121
}
113122

Sources/StreamChatSwiftUI/ChatChannel/MessageList/QuotedMessageView.swift

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ struct QuotedMessageViewContainer: View {
1414
var quotedMessage: ChatMessage
1515
var fillAvailableSpace: Bool
1616
var forceLeftToRight = false
17+
@Binding var scrolledId: String?
1718

1819
var body: some View {
1920
HStack(alignment: .bottom) {
@@ -42,6 +43,9 @@ struct QuotedMessageViewContainer: View {
4243
}
4344
}
4445
.padding(.all, 8)
46+
.onTapGesture(perform: {
47+
scrolledId = quotedMessage.messageId
48+
})
4549
}
4650
}
4751

@@ -92,6 +96,7 @@ struct QuotedMessageView: View {
9296
.frame(width: attachmentWidth, height: attachmentWidth)
9397
.aspectRatio(1, contentMode: .fill)
9498
.clipShape(RoundedRectangle(cornerRadius: 8))
99+
.allowsHitTesting(false)
95100
}
96101

97102
Text(textForMessage)

Sources/StreamChatSwiftUI/ChatChannel/MessageList/VideoAttachmentView.swift

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,16 @@ import SwiftUI
99
public struct VideoAttachmentsContainer: View {
1010
let message: ChatMessage
1111
let width: CGFloat
12+
@Binding var scrolledId: String?
1213

1314
public var body: some View {
1415
VStack {
1516
if let quotedMessage = message.quotedMessage {
1617
VStack {
1718
QuotedMessageViewContainer(
1819
quotedMessage: quotedMessage,
19-
fillAvailableSpace: !message.attachmentCounts.isEmpty
20+
fillAvailableSpace: !message.attachmentCounts.isEmpty,
21+
scrolledId: $scrolledId
2022
)
2123

2224
VideoAttachmentsList(
@@ -79,6 +81,7 @@ public struct VideoAttachmentView: View {
7981
.resizable()
8082
.scaledToFill()
8183
.clipped()
84+
.allowsHitTesting(false)
8285

8386
Button {
8487
fullScreenShown = true

0 commit comments

Comments
 (0)