응원 전체보기 추가
This commit is contained in:
		| @@ -154,6 +154,9 @@ struct ContentView: View { | ||||
|             case .userProfileDonationAll(let userId): | ||||
|                 UserProfileDonationAllView(userId: userId) | ||||
|                  | ||||
|             case .userProfileFanTalkAll(let userId): | ||||
|                 UserProfileFanTalkAllView(userId: userId) | ||||
|                  | ||||
|             default: | ||||
|                 EmptyView() | ||||
|                     .frame(width: 0, height: 0, alignment: .topLeading) | ||||
|   | ||||
| @@ -0,0 +1,172 @@ | ||||
| // | ||||
| //  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) | ||||
|                             } | ||||
|                         ) | ||||
|                     } | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user
	 Yu Sung
					Yu Sung