Skip to content

Commit acfb45a

Browse files
fix: composer visibility and anchor fix
1 parent 8300e88 commit acfb45a

File tree

1 file changed

+55
-56
lines changed

1 file changed

+55
-56
lines changed

ios/RocketChat Watch App/Views/MessageListView.swift

Lines changed: 55 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -44,70 +44,69 @@ struct MessageListView: View {
4444
}
4545
Spacer()
4646
}
47-
} else {
48-
ScrollViewReader { proxy in
49-
ChatScrollView {
50-
VStack(spacing: 0) {
51-
if room.hasMoreMessages {
52-
Button("Load more...") {
53-
guard
54-
let oldestMessage = room.firstMessage?
55-
.ts
56-
else { return }
57-
58-
messagesLoader.loadMore(from: oldestMessage)
59-
}
60-
.padding(.bottom, 8)
47+
}
48+
ScrollViewReader { proxy in
49+
ChatScrollView {
50+
VStack(spacing: 0) {
51+
if room.hasMoreMessages {
52+
Button("Load more...") {
53+
guard
54+
let oldestMessage = room.firstMessage?
55+
.ts
56+
else { return }
57+
58+
messagesLoader.loadMore(from: oldestMessage)
6159
}
60+
.padding(.bottom, 8)
61+
}
6262

63-
ForEach(messages.indices, id: \.self) { index in
64-
let message = messages[index]
65-
let previousMessage =
66-
messages.indices.contains(index - 1)
67-
? messages[index - 1] : nil
68-
69-
MessageView(
70-
viewModel: .init(
63+
ForEach(messages.indices, id: \.self) { index in
64+
let message = messages[index]
65+
let previousMessage =
66+
messages.indices.contains(index - 1)
67+
? messages[index - 1] : nil
68+
69+
MessageView(
70+
viewModel: .init(
71+
message: message,
72+
previousMessage: previousMessage,
73+
server: server,
74+
lastOpen: lastOpen
75+
)
76+
) { action in
77+
switch action {
78+
case .resend(let message):
79+
messageSender.resendMessage(
7180
message: message,
72-
previousMessage: previousMessage,
73-
server: server,
74-
lastOpen: lastOpen
81+
in: room
7582
)
76-
) { action in
77-
switch action {
78-
case .resend(let message):
79-
messageSender.resendMessage(
80-
message: message,
81-
in: room
82-
)
83-
84-
lastOpen = nil
85-
case .delete(let message):
86-
database.remove(message)
87-
}
83+
84+
lastOpen = nil
85+
case .delete(let message):
86+
database.remove(message)
8887
}
8988
}
89+
}
9090

91-
MessageComposerView(
92-
room: room,
93-
server: server,
94-
anchorID: bottomAnchor
95-
) {
96-
messageSender.sendMessage($0, in: room)
91+
MessageComposerView(
92+
room: room,
93+
server: server,
94+
anchorID: bottomAnchor
95+
) {
96+
messageSender.sendMessage($0, in: room)
9797

98-
lastOpen = nil
99-
}
100-
.id(messageComposer)
101-
.padding(.top, 8)
102-
}
103-
.onAppear {
104-
scrollToBottom(proxy: proxy)
98+
lastOpen = nil
10599
}
106-
.onChange(of: messages.last?.ts) { _ in
107-
// Also scroll to bottom when new messages arrive
108-
withAnimation(.easeOut(duration: 0.3)) {
109-
proxy.scrollTo(bottomAnchor, anchor: .center)
110-
}
100+
.id(messageComposer)
101+
.padding(.top, 8)
102+
}
103+
.onAppear {
104+
scrollToBottom(proxy: proxy)
105+
}
106+
.onChange(of: messages.last?.ts) { _ in
107+
// Also scroll to bottom when new messages arrive
108+
withAnimation(.easeOut(duration: 0.3)) {
109+
proxy.scrollTo(bottomAnchor, anchor: .bottom)
111110
}
112111
}
113112
}
@@ -150,7 +149,7 @@ struct MessageListView: View {
150149
}
151150
}
152151
}
153-
152+
154153
private func scrollToBottom(proxy: ScrollViewProxy) {
155154
// Small delay ensures layout is complete before scrolling
156155
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {

0 commit comments

Comments
 (0)