150 lines
6.9 KiB
Swift
150 lines
6.9 KiB
Swift
//
|
|
// AuditionView.swift
|
|
// SodaLive
|
|
//
|
|
// Created by klaus on 1/5/25.
|
|
//
|
|
|
|
import SwiftUI
|
|
|
|
struct AuditionView: View {
|
|
|
|
@StateObject var viewModel = AuditionViewModel()
|
|
@AppStorage("isAuditionNotification") private var isAuditionNotification: Bool = UserDefaults.bool(forKey: .isAuditionNotification)
|
|
|
|
var body: some View {
|
|
BaseView(isLoading: $viewModel.isLoading) {
|
|
VStack(spacing: 0) {
|
|
HomeNavigationBar(title: "오디션") {
|
|
Image(isAuditionNotification ? "btn_audition_notification_selected" : "btn_audition_notification_normal")
|
|
.onTapGesture {
|
|
viewModel.updateNotificationSettings()
|
|
}
|
|
}
|
|
|
|
HStack(spacing: 0) {
|
|
Text("보이스온 오디션 이용방법")
|
|
.font(.custom(Font.medium.rawValue, size: 13.3))
|
|
.foregroundColor(.white)
|
|
|
|
Spacer()
|
|
|
|
Text("자세히>")
|
|
.font(.custom(Font.medium.rawValue, size: 13.3))
|
|
.foregroundColor(.white)
|
|
}
|
|
.padding(.horizontal, 13.3)
|
|
.padding(.vertical, 10)
|
|
.background(Color.gray22)
|
|
.cornerRadius(5.3)
|
|
.padding(.horizontal, 13.3)
|
|
.padding(.bottom, 15)
|
|
.onTapGesture {
|
|
UIApplication.shared.open(
|
|
URL(string: "https://bit.ly/40EYuJc")!
|
|
)
|
|
}
|
|
|
|
ScrollView(.vertical, showsIndicators: false) {
|
|
LazyVStack(alignment: .leading, spacing: 25) {
|
|
ForEach(0..<viewModel.auditionList.count, id: \.self) {
|
|
let item = viewModel.auditionList[$0]
|
|
|
|
if $0 == 0 && !item.isOff {
|
|
VStack(alignment: .leading, spacing: 25) {
|
|
HStack(spacing: 0) {
|
|
Text("오디션")
|
|
.font(.custom(Font.bold.rawValue, size: 18.3))
|
|
.foregroundColor(Color.grayee)
|
|
|
|
Text(" ON")
|
|
.font(.custom(Font.bold.rawValue, size: 18.3))
|
|
.foregroundColor(Color.mainRed)
|
|
|
|
Spacer()
|
|
|
|
Text("총 \(viewModel.inProgressCount)개")
|
|
.font(.custom(Font.medium.rawValue, size: 11.3))
|
|
.foregroundColor(Color.graybb)
|
|
}
|
|
|
|
AuditionItemView(item: item)
|
|
.onTapGesture {
|
|
if !item.isOff {
|
|
AppState.shared
|
|
.setAppStep(
|
|
step: .auditionDetail(auditionId: item.id)
|
|
)
|
|
}
|
|
}
|
|
}
|
|
} else if $0 == viewModel.firstIsOffIndex {
|
|
VStack(alignment: .leading, spacing: 0) {
|
|
Color.gray23
|
|
.frame(maxWidth: .infinity)
|
|
.frame(height: 6.7)
|
|
.padding(.top, 5)
|
|
|
|
HStack(spacing: 0) {
|
|
Text("오디션")
|
|
.font(.custom(Font.bold.rawValue, size: 18.3))
|
|
.foregroundColor(Color.grayee)
|
|
|
|
Text(" OFF")
|
|
.font(.custom(Font.bold.rawValue, size: 18.3))
|
|
.foregroundColor(Color.graybb)
|
|
|
|
Spacer()
|
|
|
|
Text("총 \(viewModel.completedCount)개")
|
|
.font(.custom(Font.medium.rawValue, size: 11.3))
|
|
.foregroundColor(Color.graybb)
|
|
}
|
|
.padding(.top, 30)
|
|
|
|
AuditionItemView(item: item)
|
|
.padding(.top, 25)
|
|
.onTapGesture {
|
|
if !item.isOff {
|
|
AppState.shared
|
|
.setAppStep(
|
|
step: .auditionDetail(auditionId: item.id)
|
|
)
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
AuditionItemView(item: item)
|
|
.onTapGesture {
|
|
if !item.isOff {
|
|
AppState.shared
|
|
.setAppStep(
|
|
step: .auditionDetail(auditionId: item.id)
|
|
)
|
|
}
|
|
}
|
|
}
|
|
|
|
if $0 == viewModel.auditionList.count - 1 {
|
|
Color.clear
|
|
.frame(height: 0)
|
|
.onAppear {
|
|
viewModel.getAuditionList()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
.padding(.horizontal, 13.3)
|
|
}
|
|
}
|
|
.onAppear {
|
|
viewModel.getAuditionList()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
#Preview {
|
|
AuditionView()
|
|
}
|