sodalive-ios/SodaLive/Sources/Explorer/Profile/FanTalk/UserProfileFanTalkCheersIte...

234 lines
11 KiB
Swift

//
// UserProfileFanTalkCheersItemView.swift
// SodaLive
//
// Created by klaus on 2023/08/11.
//
import SwiftUI
import Kingfisher
struct UserProfileFanTalkCheersItemView: View {
let userId: Int
let cheersItem: GetCheersResponseItem
let writeCheerReply: (String) -> Void
let modifyCheer: (Int, String) -> Void
let reportPopup: (Int) -> Void
let onClickDelete: (Int) -> Void
@State var replyContent: String = ""
@State var isShowInputReply = false
@State var isShowPopupMenu: Bool = false
@State var isModeModify: Bool = false
@State var cheers: String = ""
var body: some View {
ZStack(alignment: .topTrailing) {
VStack(alignment: .leading, spacing: 0) {
HStack(alignment: .top, spacing: 6.7) {
KFImage(URL(string: cheersItem.profileUrl))
.cancelOnDisappear(true)
.downsampling(size: CGSize(width: 33.3, height: 33.3))
.resizable()
.frame(width: 33.3, height: 33.3)
.clipShape(Circle())
VStack(alignment: .leading, spacing: 0) {
Text("\(cheersItem.nickname)")
.font(.custom(Font.medium.rawValue, size: 12))
.foregroundColor(Color.gray90)
Text("\(cheersItem.date)")
.font(.custom(Font.medium.rawValue, size: 10.7))
.foregroundColor(Color.gray55)
.padding(.top, 8.3)
if isModeModify {
HStack(spacing: 10) {
TextField("", text: $cheers)
.autocapitalization(.none)
.disableAutocorrection(true)
.font(.custom(Font.medium.rawValue, size: 13.3))
.foregroundColor(Color(hex: "eeeeee"))
.padding(13.3)
.background(Color(hex: "232323"))
.accentColor(Color(hex: "3bb9f1"))
.keyboardType(.default)
.cornerRadius(10)
.overlay(
RoundedRectangle(cornerRadius: 10)
.strokeBorder(lineWidth: 1)
.foregroundColor(Color.button)
)
Text("수정")
.font(.custom(Font.bold.rawValue, size: 13.3))
.foregroundColor(Color(hex: "ffffff"))
.padding(13.3)
.background(Color.button)
.cornerRadius(6.7)
.onTapGesture {
modifyCheer(cheersItem.cheersId, cheers)
isModeModify = false
}
Text("취소")
.font(.custom(Font.bold.rawValue, size: 13.3))
.foregroundColor(Color.button)
.padding(13.3)
.background(Color(hex: "222222"))
.cornerRadius(6.7)
.onTapGesture {
isModeModify = false
}
}
.padding(.top, 13.3)
} else {
Text("\(cheersItem.content)")
.font(.custom(Font.medium.rawValue, size: 13.3))
.foregroundColor(Color.grayee)
.fixedSize(horizontal: false, vertical: true)
.lineSpacing(8)
.padding(.top, 13.3)
}
if isShowInputReply {
HStack(spacing: 10) {
TextField("응원댓글에 답글을 남겨보세요!", text: $replyContent)
.autocapitalization(.none)
.disableAutocorrection(true)
.font(.custom(Font.medium.rawValue, size: 13.3))
.foregroundColor(Color(hex: "eeeeee"))
.padding(13.3)
.background(Color(hex: "232323"))
.accentColor(Color(hex: "3bb9f1"))
.keyboardType(.default)
.cornerRadius(10)
.overlay(
RoundedRectangle(cornerRadius: 10)
.strokeBorder(lineWidth: 1)
.foregroundColor(Color(hex: "3bb9f1"))
)
Text("등록")
.font(.custom(Font.bold.rawValue, size: 13.3))
.foregroundColor(Color(hex: "ffffff"))
.padding(13.3)
.background(Color(hex: "3bb9f1"))
.cornerRadius(6.7)
.onTapGesture {
if cheersItem.replyList.count > 0 {
modifyCheer(cheersItem.replyList[0].cheersId, replyContent)
} else {
writeCheerReply(replyContent)
}
}
}
.padding(.top, 10)
} else {
if cheersItem.replyList.count <= 0 {
if userId == UserDefaults.int(forKey: .userId) {
Text("답글쓰기")
.font(.custom(Font.medium.rawValue, size: 12))
.foregroundColor(Color.button)
.padding(.top, 18.3)
.onTapGesture {
isShowInputReply = true
}
}
} else {
let reply = cheersItem.replyList[0]
VStack(alignment: .leading, spacing: 8.3) {
Text(reply.content)
.font(.custom(Font.medium.rawValue, size: 12))
.foregroundColor(Color(hex: "ffffff"))
.frame(minWidth: 100)
.padding(.horizontal, 6.7)
.padding(.vertical, 6.7)
.background(Color.button.opacity(0.3))
.cornerRadius(16.7)
.padding(.top, 18.3)
HStack(spacing: 6.7) {
Text(reply.date)
.font(.custom(Font.medium.rawValue, size: 10.7))
.foregroundColor(Color(hex: "525252"))
if userId == UserDefaults.int(forKey: .userId) {
Text("답글 수정")
.font(.custom(Font.medium.rawValue, size: 10.7))
.foregroundColor(Color(hex: "9970ff"))
.onTapGesture {
self.replyContent = reply.content
isShowInputReply = true
}
}
}
}
}
}
}
Spacer()
if !isModeModify {
Image("ic_seemore_vertical")
.onTapGesture { isShowPopupMenu = true }
}
}
Rectangle()
.frame(height: 1)
.foregroundColor(Color(hex: "909090").opacity(0.5))
.padding(.top, 13.3)
}
.frame(width: screenSize().width - 26.7)
if isShowPopupMenu {
VStack(spacing: 10) {
if cheersItem.memberId != UserDefaults.int(forKey: .userId) {
Text("신고하기")
.font(.custom(Font.medium.rawValue, size: 14))
.foregroundColor(Color(hex: "777777"))
.onTapGesture {
reportPopup(cheersItem.cheersId)
isShowPopupMenu = false
}
}
if cheersItem.memberId == UserDefaults.int(forKey: .userId) {
Text("수정")
.font(.custom(Font.medium.rawValue, size: 14))
.foregroundColor(Color(hex: "777777"))
.onTapGesture {
isModeModify = true
isShowPopupMenu = false
cheers = cheersItem.content
}
}
if userId == UserDefaults.int(forKey: .userId) ||
cheersItem.memberId == UserDefaults.int(forKey: .userId)
{
Text("삭제")
.font(.custom(Font.medium.rawValue, size: 14))
.foregroundColor(Color(hex: "777777"))
.onTapGesture {
onClickDelete(cheersItem.cheersId)
isShowPopupMenu = false
}
}
}
.padding(10)
.background(Color(hex: "222222"))
}
}
.contentShape(Rectangle())
.onTapGesture {
isShowPopupMenu = false
}
}
}