메시지 추가 로딩 되지 않는 버그 수정

This commit is contained in:
Yu Sung 2023-09-13 14:39:35 +09:00
parent 9863fc66de
commit 3bcd2b7dba
3 changed files with 46 additions and 13 deletions

View File

@ -22,7 +22,8 @@ struct TextMessageView: View {
ScrollView(.vertical, showsIndicators: false) {
if viewModel.items.count > 0 {
LazyVStack(spacing: 26.7) {
ForEach(viewModel.items, id: \.self) { item in
ForEach(0..<viewModel.items.count, id: \.self) { index in
let item = viewModel.items[index]
TextMessageItemView(item: item)
.frame(width: screenSize().width - 26.7)
.contentShape(Rectangle())
@ -33,6 +34,7 @@ struct TextMessageView: View {
messageBox: viewModel.currentFilter,
refresh: {
viewModel.page = 1
viewModel.isLast = false
switch viewModel.currentFilter {
case .receive:
viewModel.getReceivedTextMessage()
@ -45,6 +47,18 @@ struct TextMessageView: View {
)
)
}
.onAppear {
if index == viewModel.items.count - 1 && !viewModel.isLast {
switch viewModel.currentFilter {
case .receive:
viewModel.getReceivedTextMessage()
case .sent:
viewModel.getSentTextMessage()
case .keep:
viewModel.getKeepTextMessage()
}
}
}
}
}
.padding(.top, 26.7)

View File

@ -21,6 +21,7 @@ final class TextMessageViewModel: ObservableObject {
@Published var currentFilter: MessageFilterTab = .receive {
willSet(newVal) {
page = 1
isLast = false
switch newVal {
case .receive:
@ -43,6 +44,7 @@ final class TextMessageViewModel: ObservableObject {
let placeholder = "내용을 입력해 주세요."
var isLast = false
var page = 1
private let size = 10
@ -128,7 +130,12 @@ final class TextMessageViewModel: ObservableObject {
let decoded = try jsonDecoder.decode(ApiResponse<GetTextMessageResponse>.self, from: responseData)
if let data = decoded.data, decoded.success {
self.items.append(contentsOf: data.items)
if data.items.count <= 0 {
self.isLast = true
} else {
self.items.append(contentsOf: data.items)
self.page += 1
}
} else {
if let message = decoded.message {
self.errorMessage = message
@ -171,7 +178,12 @@ final class TextMessageViewModel: ObservableObject {
let decoded = try jsonDecoder.decode(ApiResponse<GetTextMessageResponse>.self, from: responseData)
if let data = decoded.data, decoded.success {
self.items.append(contentsOf: data.items)
if data.items.count <= 0 {
self.isLast = true
} else {
self.items.append(contentsOf: data.items)
self.page += 1
}
} else {
if let message = decoded.message {
self.errorMessage = message
@ -214,7 +226,12 @@ final class TextMessageViewModel: ObservableObject {
let decoded = try jsonDecoder.decode(ApiResponse<GetTextMessageResponse>.self, from: responseData)
if let data = decoded.data, decoded.success {
self.items.append(contentsOf: data.items)
if data.items.count <= 0 {
self.isLast = true
} else {
self.items.append(contentsOf: data.items)
self.page += 1
}
} else {
if let message = decoded.message {
self.errorMessage = message

View File

@ -57,15 +57,17 @@ final class VoiceMessageViewModel: ObservableObject {
}
func loadMessage() {
switch currentFilter {
case .receive:
getReceivedVoiceMessage()
case .sent:
getSentVoiceMessage()
case .keep:
getKeepVoiceMessage()
if !isLast {
switch currentFilter {
case .receive:
getReceivedVoiceMessage()
case .sent:
getSentVoiceMessage()
case .keep:
getKeepVoiceMessage()
}
}
}