92 lines
3.6 KiB
Swift
92 lines
3.6 KiB
Swift
import SwiftUI
|
|
|
|
struct CreatorChannelReplyDetailView: View {
|
|
let context: CreatorChannelReplyDetailContext
|
|
let onFanTalkRefresh: (() -> Void)?
|
|
let onCommunityRefresh: (() -> 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 {
|
|
SodaV2ActionModal(
|
|
title: I18n.Common.commentDeleteTitle,
|
|
message: I18n.Common.confirmDeleteQuestion,
|
|
button1: SodaV2ActionModalButton(
|
|
label: I18n.Common.delete,
|
|
action: viewModel.confirmDelete
|
|
),
|
|
button2: SodaV2ActionModalButton(
|
|
label: I18n.Common.cancel,
|
|
action: dismissDeleteDialog
|
|
),
|
|
onDimmedTap: dismissDeleteDialog
|
|
)
|
|
}
|
|
|
|
if viewModel.isShowReplaceReplyDialog {
|
|
SodaV2ActionModal(
|
|
title: I18n.CreatorChannelReplyDetail.replaceReplyTitle,
|
|
message: I18n.CreatorChannelReplyDetail.replaceReplyMessage,
|
|
button1: SodaV2ActionModalButton(
|
|
label: I18n.CreatorChannelReplyDetail.replaceReplyConfirm,
|
|
action: viewModel.confirmReplaceReply
|
|
),
|
|
button2: SodaV2ActionModalButton(
|
|
label: I18n.Common.cancel,
|
|
action: viewModel.dismissReplaceReplyDialog
|
|
),
|
|
onDimmedTap: viewModel.dismissReplaceReplyDialog
|
|
)
|
|
}
|
|
}
|
|
.navigationBarBackButtonHidden(true)
|
|
.onAppear {
|
|
viewModel.configure(context: context, onFanTalkRefresh: onFanTalkRefresh, onCommunityRefresh: onCommunityRefresh)
|
|
}
|
|
.sodaToast(isPresented: $viewModel.isShowPopup, message: viewModel.errorMessage, autohideIn: 1)
|
|
}
|
|
|
|
private func dismissDeleteDialog() {
|
|
viewModel.isShowDeleteDialog = false
|
|
viewModel.deletingItem = nil
|
|
}
|
|
}
|