// // UserProfileFanTalkAllView.swift // SodaLive // // Created by klaus on 2023/08/29. // import SwiftUI import Kingfisher struct UserProfileFanTalkAllView: View { let userId: Int @StateObject var viewModel = UserProfileFanTalkViewModel() @State private var cheersContent: String = "" var body: some View { GeometryReader { proxy in BaseView(isLoading: $viewModel.isLoading) { VStack(spacing: 0) { DetailNavigationBar(title: "팬 Talk 전체보기") VStack(alignment: .leading, spacing: 0) { HStack(spacing: 6.7) { Text("응원") .font(.custom(Font.medium.rawValue, size: 14.7)) .foregroundColor(Color(hex: "eeeeee")) Text("\(viewModel.cheersTotalCount)") .font(.custom(Font.medium.rawValue, size: 12)) .foregroundColor(Color(hex: "777777")) } .padding(.top, 20) Rectangle() .frame(height: 1) .foregroundColor(Color(hex: "909090").opacity(0.5)) .padding(.top, 13.3) HStack(spacing: 0) { TextField("응원댓글을 입력하세요", text: $cheersContent) .autocapitalization(.none) .disableAutocorrection(true) .font(.custom(Font.medium.rawValue, size: 13.3)) .foregroundColor(Color(hex: "eeeeee")) .accentColor(Color(hex: "9970ff")) .keyboardType(.default) .padding(.horizontal, 13.3) Spacer() Image("btn_message_send") .resizable() .frame(width: 35, height: 35) .padding(6.7) .onTapGesture { hideKeyboard() viewModel.writeCheers(creatorId: userId, cheersContent: cheersContent) cheersContent = "" } } .background(Color(hex: "232323")) .cornerRadius(10) .overlay( RoundedRectangle(cornerRadius: 10) .strokeBorder(lineWidth: 1) .foregroundColor(Color(hex: "9970ff")) ) .padding(.top, 13.3) Rectangle() .frame(height: 1) .foregroundColor(Color(hex: "909090").opacity(0.5)) .padding(.top, 13.3) ScrollView(.vertical, showsIndicators: false) { LazyVStack(spacing: 20) { if viewModel.cheersTotalCount > 0 { ForEach(0..<viewModel.cheersList.count, id: \.self) { index in let cheer = viewModel.cheersList[index] UserProfileFanTalkCheersItemView( userId: userId, cheer: cheer, writeCheerReply: { cheersReplyContent in viewModel.writeCheersReply(parentCheersId: cheer.cheersId, creatorId: userId, cheersReplyContent: cheersReplyContent) }, modifyCheer: { cheersId, cheersReplyContent in viewModel.modifyCheersReply(cheersId: cheersId, creatorId: userId, cheersReplyContent: cheersReplyContent) }, reportPopup: { cheersId in viewModel.reportCheersId = cheersId viewModel.isShowCheersReportMenu = true } ) .onAppear { if index == viewModel.cheersList.count - 1 { viewModel.getCheersList(creatorId: userId) } } .onTapGesture { hideKeyboard() } } } else { Text("응원이 없습니다.\n\n처음으로 응원을 해보세요!") .font(.custom(Font.light.rawValue, size: 13.3)) .foregroundColor(Color(hex: "bbbbbb")) .multilineTextAlignment(.center) .fixedSize(horizontal: false, vertical: true) .padding(.vertical, 60) .frame(width: screenSize().width - 26.7) Spacer() } } } .padding(.top, 20) } .frame(width: screenSize().width - 26.7) .onAppear { viewModel.getCheersList(creatorId: userId) } .padding(.horizontal, 13.3) } .onTapGesture { hideKeyboard() } .popup(isPresented: $viewModel.isShowPopup, type: .toast, position: .bottom, autohideIn: 2) { HStack { Spacer() Text(viewModel.errorMessage) .padding(.vertical, 13.3) .frame(width: screenSize().width - 66.7, alignment: .center) .font(.custom(Font.medium.rawValue, size: 12)) .background(Color(hex: "9970ff")) .foregroundColor(Color.white) .multilineTextAlignment(.leading) .cornerRadius(20) .padding(.bottom, 66.7) Spacer() } } ZStack { if viewModel.isShowCheersReportMenu { VStack(spacing: 0) { CheersReportMenuView( isShowing: $viewModel.isShowCheersReportMenu, onClickReport: { viewModel.isShowCheersReportView = true } ) if proxy.safeAreaInsets.bottom > 0 { Rectangle() .foregroundColor(Color(hex: "222222")) .frame(width: proxy.size.width, height: 15.3) } } .ignoresSafeArea() } if viewModel.isShowCheersReportView { CheersReportDialogView( isShowing: $viewModel.isShowCheersReportView, confirmAction: { reason in viewModel.report(type: .CHEERS, reason: reason) } ) } } } } } }