File tree Expand file tree Collapse file tree 2 files changed +30
-17
lines changed Expand file tree Collapse file tree 2 files changed +30
-17
lines changed Original file line number Diff line number Diff line change 1+ import SwiftUI
2+
3+ struct ChatScrollView < Content: View > : View {
4+ typealias MessageBuilder = ( ReceivedMessage ) -> Content
5+
6+ @EnvironmentObject private var session : AgentSession
7+ let messageBuilder : MessageBuilder
8+
9+ var body : some View {
10+ ScrollViewReader { scrollView in
11+ ScrollView {
12+ LazyVStack {
13+ ForEach ( session. messages. values. reversed ( ) , content: { message in
14+ messageBuilder ( message)
15+ . upsideDown ( )
16+ . id ( message. id)
17+ } )
18+ }
19+ }
20+ . onChange ( of: session. messages. count) {
21+ scrollView. scrollTo ( session. messages. keys. last)
22+ }
23+ . upsideDown ( )
24+ . padding ( . horizontal)
25+ . scrollIndicators ( . never)
26+ . animation ( . default, value: session. messages)
27+ }
28+ }
29+ }
Original file line number Diff line number Diff line change 11import SwiftUI
22
3- /// A multiplatform view that shows the message feed.
43struct ChatView : View {
54 @EnvironmentObject private var session : AgentSession
65
76 var body : some View {
8- ScrollViewReader { scrollView in
9- ScrollView {
10- LazyVStack {
11- ForEach ( session. messages. values. reversed ( ) , content: message)
12- }
13- }
14- . onChange ( of: session. messages. count) {
15- scrollView. scrollTo ( session. messages. keys. last)
16- }
17- . upsideDown ( )
18- . padding ( . horizontal)
19- . scrollIndicators ( . never)
20- . animation ( . default, value: session. messages)
21- }
7+ ChatScrollView ( messageBuilder: message)
228 }
239
2410 @ViewBuilder
@@ -31,8 +17,6 @@ struct ChatView: View {
3117 agentTranscript ( text)
3218 }
3319 }
34- . upsideDown ( )
35- . id ( message. id) // for the ScrollViewReader to work
3620 }
3721
3822 @ViewBuilder
You can’t perform that action at this time.
0 commit comments