오디션 상세

- 지원리스트에서 유저 프로필을 누르면 채널로 이동
This commit is contained in:
Yu Sung 2025-01-08 16:21:29 +09:00
parent ca7a2d4c72
commit b5b53f95c7
4 changed files with 166 additions and 152 deletions

View File

@ -36,12 +36,18 @@ struct AuditionApplicantItemView: View {
)
}
}
.onTapGesture {
AppState.shared.setAppStep(step: .creatorDetail(userId: item.memberId))
}
VStack(spacing: 8) {
HStack(spacing: 0) {
Text(item.nickname.count > 9 ? "\(item.nickname.prefix(9))..." : item.nickname)
.font(.custom(Font.medium.rawValue, size: 12))
.foregroundColor(Color.white)
.onTapGesture {
AppState.shared.setAppStep(step: .creatorDetail(userId: item.memberId))
}
Spacer()

View File

@ -19,6 +19,7 @@ struct GetCreatorProfileResponse: Decodable {
let activitySummary: GetCreatorActivitySummary
let seriesList: [SeriesListItem]
let isBlock: Bool
let isCreatorRole: Bool
}
struct CreatorResponse: Decodable {

View File

@ -11,6 +11,7 @@ import Kingfisher
struct UserProfileCreatorView: View {
let creator: CreatorResponse
let isCreator: Bool
let creatorFollow: () -> Void
let showCreatorFollowNotifyDialog: () -> Void
@ -42,10 +43,12 @@ struct UserProfileCreatorView: View {
Spacer()
Image("btn_big_share")
.resizable()
.frame(width: 33.3, height: 33.3)
.onTapGesture { shareChannel() }
if isCreator {
Image("btn_big_share")
.resizable()
.frame(width: 33.3, height: 33.3)
.onTapGesture { shareChannel() }
}
}
if creator.creatorId == UserDefaults.int(forKey: .userId) {
@ -158,7 +161,8 @@ struct UserProfileCreatorView_Previews: PreviewProvider {
isNotify: false,
isNotification: false,
notificationRecipientCount: 2
)
),
isCreator: false
) {
} showCreatorFollowNotifyDialog: {
} shareChannel: {

View File

@ -52,171 +52,174 @@ struct UserProfileView: View {
VStack(spacing: 0) {
if let creatorProfile = viewModel.creatorProfile {
VStack(spacing: 0) {
UserProfileCreatorView(
creator: creatorProfile.creator) {
viewModel.creatorFollow()
} showCreatorFollowNotifyDialog: {
isShowFollowNotifyDialog = true
} shareChannel: {
viewModel.shareChannel(userId: userId)
}
UserProfileCreatorView(creator: creatorProfile.creator, isCreator: creatorProfile.isCreatorRole) {
viewModel.creatorFollow()
} showCreatorFollowNotifyDialog: {
isShowFollowNotifyDialog = true
} shareChannel: {
viewModel.shareChannel(userId: userId)
}
UserProfileActivitySummaryView(item: creatorProfile.activitySummary)
.padding(.top, 13.3)
.padding(.horizontal, 13.3)
if viewModel.communityPostList.count > 0 {
ScrollView(.horizontal, showsIndicators: false) {
LazyHStack(spacing: 13.3) {
if UserDefaults.int(forKey: .userId) == creatorProfile.creator.creatorId {
CreatorCommunityWriteItemView()
.onTapGesture {
AppState.shared.setAppStep(
step: .creatorCommunityWrite(
onSuccess: creatorCommunityWriteSuccess
if creatorProfile.isCreatorRole {
UserProfileActivitySummaryView(item: creatorProfile.activitySummary)
.padding(.top, 13.3)
.padding(.horizontal, 13.3)
if viewModel.communityPostList.count > 0 {
ScrollView(.horizontal, showsIndicators: false) {
LazyHStack(spacing: 13.3) {
if UserDefaults.int(forKey: .userId) == creatorProfile.creator.creatorId {
CreatorCommunityWriteItemView()
.onTapGesture {
AppState.shared.setAppStep(
step: .creatorCommunityWrite(
onSuccess: creatorCommunityWriteSuccess
)
)
}
}
ForEach(0..<viewModel.communityPostList.count, id: \.self) { index in
let item = viewModel.communityPostList[index]
CreatorCommunityItemView(item: item)
.frame(width: 320)
.onTapGesture {
AppState.shared
.setAppStep(
step: .creatorCommunityAll(creatorId: userId)
)
}
}
CreatorCommunityMoreItemView {
AppState.shared
.setAppStep(
step: .creatorCommunityAll(creatorId: userId)
)
}
}
ForEach(0..<viewModel.communityPostList.count, id: \.self) { index in
let item = viewModel.communityPostList[index]
CreatorCommunityItemView(item: item)
.frame(width: 320)
.onTapGesture {
AppState.shared
.setAppStep(
step: .creatorCommunityAll(creatorId: userId)
)
}
}
CreatorCommunityMoreItemView {
AppState.shared
.setAppStep(
step: .creatorCommunityAll(creatorId: userId)
)
}
}
.padding(.horizontal, 13.3)
}
.padding(.horizontal, 13.3)
}
.frame(minHeight: 146)
.padding(.top, 26.7)
} else {
if UserDefaults.int(forKey: .userId) == creatorProfile.creator.creatorId {
CreatorCommunityNoPostsItemView(
onSuccess: creatorCommunityWriteSuccess
)
.frame(minHeight: 146)
.padding(.top, 26.7)
.padding(.horizontal, 13.3)
}
}
}
if !creatorProfile.seriesList.isEmpty {
UserProfileSeriesView(
creatorId: creatorProfile.creator.creatorId,
items: creatorProfile.seriesList
)
.padding(.top, 26.7)
.padding(.horizontal, 13.3)
}
if creatorProfile.contentList.count > 0 ||
userId == UserDefaults.int(forKey: .userId)
{
UserProfileContentView(
userId: userId,
items: creatorProfile.contentList
)
.padding(.top, 26.7)
.padding(.horizontal, 13.3)
}
if creatorProfile.creator.creatorId == UserDefaults.int(forKey: .userId) || creatorProfile.liveRoomList.count > 0 {
VStack(alignment: .leading, spacing: 26.7) {
Text("라이브")
.font(.custom(Font.bold.rawValue, size: 16.7))
.foregroundColor(Color.grayee)
if creatorProfile.creator.creatorId == UserDefaults.int(forKey: .userId) {
HStack(spacing: 8) {
Text("룰렛 설정")
.font(.custom(Font.bold.rawValue, size: 15))
.foregroundColor(Color.grayee)
.padding(.vertical, 17)
.frame(maxWidth: .infinity)
.background(Color.button)
.cornerRadius(5.3)
.onTapGesture { isShowRouletteSettings = true }
Text("메뉴 설정")
.font(.custom(Font.bold.rawValue, size: 15))
.foregroundColor(Color.grayee)
.padding(.vertical, 17)
.frame(maxWidth: .infinity)
.background(Color.button)
.cornerRadius(5.3)
.onTapGesture { isShowMenuSettings = true }
} else {
if UserDefaults.int(forKey: .userId) == creatorProfile.creator.creatorId {
CreatorCommunityNoPostsItemView(
onSuccess: creatorCommunityWriteSuccess
)
.padding(.top, 26.7)
.padding(.horizontal, 13.3)
}
}
if creatorProfile.liveRoomList.count > 0 {
UserProfileLiveView(
userId: userId,
liveRoomList: creatorProfile.liveRoomList,
onClickParticipant: { liveRoom in
if creatorProfile.creator.creatorId == UserDefaults.int(forKey: .userId) {
viewModel.errorMessage = "현재 라이브 중입니다."
viewModel.isShowPopup = true
} else {
AppState.shared.isShowPlayer = false
DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) {
viewModel.enterLiveRoom(roomId: liveRoom.roomId)
}
}
if creatorProfile.isCreatorRole {
if !creatorProfile.seriesList.isEmpty {
UserProfileSeriesView(
creatorId: creatorProfile.creator.creatorId,
items: creatorProfile.seriesList
)
.padding(.top, 26.7)
.padding(.horizontal, 13.3)
}
if creatorProfile.contentList.count > 0 ||
userId == UserDefaults.int(forKey: .userId)
{
UserProfileContentView(
userId: userId,
items: creatorProfile.contentList
)
.padding(.top, 26.7)
.padding(.horizontal, 13.3)
}
if creatorProfile.creator.creatorId == UserDefaults.int(forKey: .userId) || creatorProfile.liveRoomList.count > 0 {
VStack(alignment: .leading, spacing: 26.7) {
Text("라이브")
.font(.custom(Font.bold.rawValue, size: 16.7))
.foregroundColor(Color.grayee)
if creatorProfile.creator.creatorId == UserDefaults.int(forKey: .userId) {
HStack(spacing: 8) {
Text("룰렛 설정")
.font(.custom(Font.bold.rawValue, size: 15))
.foregroundColor(Color.grayee)
.padding(.vertical, 17)
.frame(maxWidth: .infinity)
.background(Color.button)
.cornerRadius(5.3)
.onTapGesture { isShowRouletteSettings = true }
Text("메뉴 설정")
.font(.custom(Font.bold.rawValue, size: 15))
.foregroundColor(Color.grayee)
.padding(.vertical, 17)
.frame(maxWidth: .infinity)
.background(Color.button)
.cornerRadius(5.3)
.onTapGesture { isShowMenuSettings = true }
}
}
if creatorProfile.liveRoomList.count > 0 {
UserProfileLiveView(
userId: userId,
liveRoomList: creatorProfile.liveRoomList,
onClickParticipant: { liveRoom in
if creatorProfile.creator.creatorId == UserDefaults.int(forKey: .userId) {
viewModel.errorMessage = "현재 라이브 중입니다."
viewModel.isShowPopup = true
} else {
AppState.shared.isShowPlayer = false
DispatchQueue.main.asyncAfter(deadline: .now() + 0.2) {
viewModel.enterLiveRoom(roomId: liveRoom.roomId)
}
}
},
onClickReservation: { liveRoom in
if creatorProfile.creator.creatorId == UserDefaults.int(forKey: .userId) {
viewModel.errorMessage = "내가 만든 라이브는 예약할 수 없습니다."
viewModel.isShowPopup = true
} else {
viewModel.reservationLiveRoom(roomId: liveRoom.roomId)
}
}
},
onClickReservation: { liveRoom in
if creatorProfile.creator.creatorId == UserDefaults.int(forKey: .userId) {
viewModel.errorMessage = "내가 만든 라이브는 예약할 수 없습니다."
viewModel.isShowPopup = true
} else {
viewModel.reservationLiveRoom(roomId: liveRoom.roomId)
}
}
)
)
}
}
}
.padding(.top, 26.7)
.padding(.horizontal, 13.3)
}
VStack(spacing: 26.7) {
let introduce = creatorProfile.creator.introduce
UserProfileIntroduceView(
introduce: introduce.trimmingCharacters(in: .whitespaces).count <= 0 ?
"채널 소개내용이 없습니다." :
introduce)
Rectangle()
.frame(height: 1)
.foregroundColor(Color(hex: "909090").opacity(0.5))
.padding(.top, 26.7)
.padding(.horizontal, 13.3)
}
.padding(.top, 26.7)
if creatorProfile.userDonationRanking.count > 0 {
}
VStack(spacing: 26.7) {
UserProfileDonationView(userId: userId, donationRankingResponse: creatorProfile.userDonationRanking)
.padding(.horizontal, 13.3)
let introduce = creatorProfile.creator.introduce
UserProfileIntroduceView(
introduce: introduce.trimmingCharacters(in: .whitespaces).count <= 0 ?
"채널 소개내용이 없습니다." :
introduce)
Rectangle()
.frame(height: 6.7)
.foregroundColor(Color.gray90.opacity(0.5))
.frame(height: 1)
.foregroundColor(Color(hex: "909090").opacity(0.5))
.padding(.horizontal, 13.3)
}
.padding(.top, 26.7)
if creatorProfile.userDonationRanking.count > 0 {
VStack(spacing: 26.7) {
UserProfileDonationView(userId: userId, donationRankingResponse: creatorProfile.userDonationRanking)
.padding(.horizontal, 13.3)
Rectangle()
.frame(height: 6.7)
.foregroundColor(Color.gray90.opacity(0.5))
}
.padding(.top, 26.7)
}
}
UserProfileFanTalkView(
userId: userId,
cheers: creatorProfile.cheers,