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 ) } } .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 } }