// // UserProfileFanTalkView.swift // SodaLive // // Created by klaus on 2023/08/11. // import SwiftUI import Kingfisher struct UserProfileFanTalkView: View { @StateObject var viewModel = UserProfileFanTalkViewModel() let userId: Int let cheers: GetCheersResponse let errorPopup: (String) -> Void let reportPopup: (Int) -> Void @Binding var isLoading: Bool @State private var cheersContent: String = "" var body: some View { VStack(alignment: .leading, spacing: 0) { HStack(spacing: 0) { Text("팬 Talk") .font(.custom(Font.bold.rawValue, size: 16.7)) .foregroundColor(Color(hex: "eeeeee")) Spacer() Text("전체보기") .font(.custom(Font.light.rawValue, size: 11.3)) .foregroundColor(Color(hex: "bbbbbb")) .onTapGesture { AppState.shared.setAppStep(step: .userProfileFanTalkAll(userId: userId)) } } .padding(.horizontal, 13.3) VStack(alignment: .leading, spacing: 0) { HStack(spacing: 6.7) { Text("응원") .font(.custom(Font.medium.rawValue, size: 14.7)) .foregroundColor(Color(hex: "eeeeee")) Text("\(cheers.totalCount)") .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) VStack(spacing: 20) { if viewModel.cheersTotalCount > 0 { ForEach(0..<viewModel.cheersList.count, id: \.self) { let cheer = viewModel.cheersList[$0] 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 reportPopup(cheersId) } ) .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) } } .padding(.top, 20) } .frame(width: screenSize().width - 26.7) .padding(.horizontal, 13.3) } .onTapGesture { hideKeyboard() } .onAppear { viewModel.pageSize = 4 viewModel.setLoading = { isLoading = $0 } viewModel.errorPopup = errorPopup viewModel.cheersList.removeAll() viewModel.cheersTotalCount = cheers.totalCount viewModel.cheersList.append(contentsOf: cheers.cheers) } } }