오디션 지원 완료 다이얼로그 추가
This commit is contained in:
parent
1d3350d498
commit
8228f4717a
|
@ -138,7 +138,7 @@ enum AppStep {
|
|||
|
||||
case auditionDetail(auditionId: Int)
|
||||
|
||||
case auditionRoleDetail(roleId: Int)
|
||||
case auditionRoleDetail(roleId: Int, auditionTitle: String)
|
||||
|
||||
case searchChannel
|
||||
}
|
||||
|
|
|
@ -51,7 +51,12 @@ struct AuditionDetailView: View {
|
|||
.onTapGesture {
|
||||
if !role.isComplete {
|
||||
AppState.shared
|
||||
.setAppStep(step: .auditionRoleDetail(roleId: role.roleId))
|
||||
.setAppStep(
|
||||
step: .auditionRoleDetail(
|
||||
roleId: role.roleId,
|
||||
auditionTitle: viewModel.title
|
||||
)
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -11,6 +11,7 @@ import Kingfisher
|
|||
struct AuditionRoleDetailView: View {
|
||||
|
||||
let roleId: Int
|
||||
let auditionTitle: String
|
||||
|
||||
@StateObject var viewModel = AuditionRoleDetailViewModel()
|
||||
@StateObject var keyboardHandler = KeyboardHandler()
|
||||
|
@ -22,6 +23,7 @@ struct AuditionRoleDetailView: View {
|
|||
@State private var isShowNoticeAuthView = false
|
||||
@State private var isShowApplyView = false
|
||||
@State private var isShowNoticeReapply = false
|
||||
@State private var isShowApplyCompleteView = false
|
||||
|
||||
var body: some View {
|
||||
BaseView(isLoading: $viewModel.isLoading) {
|
||||
|
@ -253,6 +255,7 @@ struct AuditionRoleDetailView: View {
|
|||
viewModel.applyAudition {
|
||||
isShowApplyView = false
|
||||
isShowRecordingView = false
|
||||
isShowApplyCompleteView = true
|
||||
}
|
||||
}
|
||||
)
|
||||
|
@ -285,17 +288,25 @@ struct AuditionRoleDetailView: View {
|
|||
}
|
||||
}
|
||||
|
||||
if viewModel.isShowSodaDialog {
|
||||
if viewModel.isShowVoteCompleteView {
|
||||
SodaDialog(
|
||||
title: viewModel.dialogTitle,
|
||||
desc: viewModel.dialogDesc,
|
||||
confirmButtonTitle: "확인"
|
||||
) {
|
||||
viewModel.isShowSodaDialog = false
|
||||
viewModel.isShowVoteCompleteView = false
|
||||
viewModel.isShowNotifyVote = false
|
||||
}
|
||||
}
|
||||
|
||||
if isShowApplyCompleteView {
|
||||
ApplyAuditionCompleteDialog(
|
||||
auditionTitle: auditionTitle,
|
||||
roleName: viewModel.name,
|
||||
isShowing: $isShowApplyCompleteView
|
||||
)
|
||||
}
|
||||
|
||||
if soundManager.isLoading {
|
||||
LoadingView()
|
||||
}
|
||||
|
@ -334,5 +345,5 @@ struct AuditionRoleDetailView: View {
|
|||
}
|
||||
|
||||
#Preview {
|
||||
AuditionRoleDetailView(roleId: 1)
|
||||
AuditionRoleDetailView(roleId: 1, auditionTitle: "스위치온")
|
||||
}
|
||||
|
|
|
@ -35,7 +35,7 @@ final class AuditionRoleDetailViewModel: ObservableObject {
|
|||
@Published var phoneNumber = ""
|
||||
|
||||
@Published var isShowNotifyVote = true
|
||||
@Published var isShowSodaDialog = false
|
||||
@Published var isShowVoteCompleteView = false
|
||||
@Published var isShowNoticeReapply = false
|
||||
@Published var dialogTitle = ""
|
||||
@Published var dialogDesc = ""
|
||||
|
@ -236,8 +236,6 @@ final class AuditionRoleDetailViewModel: ObservableObject {
|
|||
let decoded = try jsonDecoder.decode(ApiResponseWithoutData.self, from: responseData)
|
||||
|
||||
if decoded.success {
|
||||
self.errorMessage = "오디션 지원이 완료되었습니다."
|
||||
self.isShowPopup = true
|
||||
self.deleteAllRecordingFilesWithNamePrefix("voiceon_now_voice")
|
||||
|
||||
self.phoneNumber = ""
|
||||
|
@ -291,7 +289,7 @@ final class AuditionRoleDetailViewModel: ObservableObject {
|
|||
if self.isShowNotifyVote {
|
||||
self.dialogTitle = "[오디션 응원]"
|
||||
self.dialogDesc = "오디션을 응원하셨습니다\n(무료응원 : 1계정당 1일 1회)\n1캔으로 추가 응원을 해보세요."
|
||||
self.isShowSodaDialog = true
|
||||
self.isShowVoteCompleteView = true
|
||||
}
|
||||
|
||||
if let index = self.applicantList.firstIndex(where: { $0.applicantId == applicantId }) {
|
||||
|
@ -306,7 +304,7 @@ final class AuditionRoleDetailViewModel: ObservableObject {
|
|||
if message.contains("오늘 응원은 여기까지") {
|
||||
self.dialogTitle = "[오늘 응원 제한]"
|
||||
self.dialogDesc = "오늘 응원은 여기까지!\n하루 최대 10회까지 이용이 가능합니다.\n내일 다시 이용해주세요."
|
||||
self.isShowSodaDialog = true
|
||||
self.isShowVoteCompleteView = true
|
||||
} else {
|
||||
self.errorMessage = message
|
||||
self.isShowPopup = true
|
||||
|
|
|
@ -206,8 +206,11 @@ struct ContentView: View {
|
|||
case .auditionDetail(let auditionId):
|
||||
AuditionDetailView(auditionId: auditionId)
|
||||
|
||||
case .auditionRoleDetail(let roleId):
|
||||
AuditionRoleDetailView(roleId: roleId)
|
||||
case .auditionRoleDetail(let roleId, let auditionTitle):
|
||||
AuditionRoleDetailView(
|
||||
roleId: roleId,
|
||||
auditionTitle: auditionTitle
|
||||
)
|
||||
|
||||
case .searchChannel:
|
||||
SearchChannelView()
|
||||
|
|
|
@ -0,0 +1,72 @@
|
|||
//
|
||||
// ApplyAuditionCompleteDialog.swift
|
||||
// SodaLive
|
||||
//
|
||||
// Created by klaus on 1/20/25.
|
||||
//
|
||||
|
||||
import SwiftUI
|
||||
|
||||
struct ApplyAuditionCompleteDialog: View {
|
||||
|
||||
let auditionTitle: String
|
||||
let roleName: String
|
||||
|
||||
@Binding var isShowing: Bool
|
||||
|
||||
var body: some View {
|
||||
ZStack {
|
||||
Color.black
|
||||
.opacity(0.5)
|
||||
|
||||
VStack(spacing: 0) {
|
||||
Text("오디션 지원")
|
||||
.font(.custom(Font.bold.rawValue, size: 18.3))
|
||||
.foregroundColor(Color.grayee)
|
||||
.padding(.top, 26.7)
|
||||
|
||||
Text("보이스온 오디션에 지원해 주셔서 감사합니다.")
|
||||
.font(.custom(Font.medium.rawValue, size: 15))
|
||||
.foregroundColor(Color.graybb)
|
||||
.padding(.top, 15)
|
||||
|
||||
Text(auditionTitle)
|
||||
.font(.custom(Font.bold.rawValue, size: 18.3))
|
||||
.foregroundColor(Color.graybb)
|
||||
.padding(.top, 20)
|
||||
|
||||
Text(roleName)
|
||||
.font(.custom(Font.medium.rawValue, size: 13.3))
|
||||
.foregroundColor(Color.graybb)
|
||||
.padding(.top, 10)
|
||||
|
||||
Text("확인")
|
||||
.font(.custom(Font.bold.rawValue, size: 18.3))
|
||||
.foregroundColor(Color.white)
|
||||
.padding(.vertical, 16)
|
||||
.frame(maxWidth: .infinity)
|
||||
.background(Color.button)
|
||||
.cornerRadius(8)
|
||||
.contentShape(Rectangle())
|
||||
.padding(.horizontal, 18.3)
|
||||
.padding(.top, 35)
|
||||
.padding(.bottom, 16.7)
|
||||
.onTapGesture {
|
||||
isShowing = false
|
||||
}
|
||||
}
|
||||
.frame(maxWidth: .infinity)
|
||||
.background(Color.gray22)
|
||||
.cornerRadius(10)
|
||||
.padding(.horizontal, 13.3)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#Preview {
|
||||
ApplyAuditionCompleteDialog(
|
||||
auditionTitle: "스위치온",
|
||||
roleName: "장예은",
|
||||
isShowing: .constant(true)
|
||||
)
|
||||
}
|
Loading…
Reference in New Issue