69 lines
2.6 KiB
Swift
69 lines
2.6 KiB
Swift
import SwiftUI
|
|
|
|
struct CreatorChannelReplyDetailView: View {
|
|
let context: CreatorChannelReplyDetailContext
|
|
let onFanTalkRefresh: (() -> Void)?
|
|
|
|
@StateObject private var viewModel = CreatorChannelReplyDetailViewModel()
|
|
|
|
var body: some View {
|
|
ZStack {
|
|
VStack(spacing: 0) {
|
|
CreatorChannelReplyDetailTitleBar {
|
|
AppState.shared.back()
|
|
}
|
|
|
|
if let parentItem = viewModel.parentItem {
|
|
CreatorChannelReplyDetailFeedView(
|
|
parentItem: parentItem,
|
|
replies: viewModel.replies,
|
|
selectedActionItem: viewModel.selectedActionItem,
|
|
canEdit: viewModel.canEdit,
|
|
canDelete: viewModel.canDelete,
|
|
onTapAction: viewModel.selectActionItem,
|
|
onTapEdit: viewModel.beginEditing,
|
|
onTapDelete: viewModel.presentDeleteDialog,
|
|
onReplyAppear: viewModel.fetchNextCommunityRepliesIfNeeded
|
|
)
|
|
.frame(maxWidth: .infinity, maxHeight: .infinity)
|
|
} else {
|
|
Spacer()
|
|
}
|
|
|
|
CreatorChannelReplyDetailInputBar(
|
|
text: $viewModel.replyText,
|
|
isSendEnabled: viewModel.isSendEnabled && viewModel.isLoading == false,
|
|
isEditing: viewModel.isEditing,
|
|
onTapSend: viewModel.send,
|
|
onTapCancelEditing: viewModel.cancelEditing
|
|
)
|
|
}
|
|
.background(Color.black.ignoresSafeArea())
|
|
|
|
if viewModel.isLoading {
|
|
LoadingView()
|
|
}
|
|
|
|
if viewModel.isShowDeleteDialog {
|
|
SodaDialog(
|
|
title: I18n.Common.commentDeleteTitle,
|
|
desc: I18n.Common.confirmDeleteQuestion,
|
|
confirmButtonTitle: I18n.Common.delete,
|
|
confirmButtonAction: viewModel.confirmDelete,
|
|
cancelButtonTitle: I18n.Common.cancel,
|
|
cancelButtonAction: {
|
|
viewModel.isShowDeleteDialog = false
|
|
viewModel.deletingItem = nil
|
|
},
|
|
textAlignment: .center
|
|
)
|
|
}
|
|
}
|
|
.navigationBarBackButtonHidden(true)
|
|
.onAppear {
|
|
viewModel.configure(context: context, onFanTalkRefresh: onFanTalkRefresh)
|
|
}
|
|
.sodaToast(isPresented: $viewModel.isShowPopup, message: viewModel.errorMessage, autohideIn: 1)
|
|
}
|
|
}
|