235 lines
11 KiB
Swift
235 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.white)
|
|
.frame(minWidth: 100)
|
|
.padding(.horizontal, 6.7)
|
|
.padding(.vertical, 6.7)
|
|
.background(Color.button.opacity(0.3))
|
|
.cornerRadius(16.7)
|
|
.padding(.top, 18.3)
|
|
.fixedSize(horizontal: false, vertical: true)
|
|
|
|
HStack(spacing: 6.7) {
|
|
Text(reply.date)
|
|
.font(.custom(Font.medium.rawValue, size: 10.7))
|
|
.foregroundColor(Color.gray52)
|
|
|
|
if userId == UserDefaults.int(forKey: .userId) {
|
|
Text("답글 수정")
|
|
.font(.custom(Font.medium.rawValue, size: 10.7))
|
|
.foregroundColor(Color.button)
|
|
.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
|
|
}
|
|
}
|
|
}
|