sodalive-ios/SodaLive/Sources/MyPage/MyPageView.swift

211 lines
10 KiB
Swift

//
// MyPageView.swift
// SodaLive
//
// Created by klaus on 2023/08/09.
//
import SwiftUI
import Bootpay
import BootpayUI
import PopupView
import RefreshableScrollView
struct MyPageView: View {
@StateObject var viewModel = MyPageViewModel()
@State private var payload = Payload()
var body: some View {
BaseView(isLoading: $viewModel.isLoading) {
if viewModel.isShowAuthView {
BootpayUI(payload: payload, requestType: BootpayRequest.TYPE_AUTHENTICATION)
.onConfirm {
DEBUG_LOG("onConfirm: \($0)")
return true
}
.onCancel {
DEBUG_LOG("onCancel: \($0)")
}
.onError {
DEBUG_LOG("onError: \($0)")
viewModel.errorMessage = "본인인증 중 오류가 발생했습니다."
viewModel.isShowPopup = true
viewModel.isShowAuthView = false
}
.onDone {
DEBUG_LOG("onDone: \($0)")
viewModel.authVerify($0)
}
.onClose {
DEBUG_LOG("onClose")
viewModel.isShowAuthView = false
}
} else {
GeometryReader { geo in
VStack {
HomeNavigationBar(title: "마이 페이지") {
Image("ic_settings")
.resizable()
.frame(width: 20, height: 20)
.onTapGesture {
AppState.shared.setAppStep(step: .settings)
}
}
RefreshableScrollView(
refreshing: $viewModel.isLoading,
action: {
viewModel.getMypage()
}
) {
VStack(spacing: 0) {
if let data = viewModel.myPageResponse {
MyInfoCardView(data: data) {
viewModel.getMypage()
}
.frame(width: screenSize().width - 26.7)
.padding(.top, 13.3)
if UserDefaults.string(forKey: .role) == MemberRole.CREATOR.rawValue {
Text("내 채널 보기")
.frame(width: screenSize().width - 26.7, height: 46.7)
.font(.custom(Font.bold.rawValue, size: 15.3))
.foregroundColor(Color.grayee)
.background(Color.button)
.cornerRadius(6.7)
.padding(.top, 26.7)
.onTapGesture {
AppState.shared.setAppStep(step: .creatorDetail(userId: UserDefaults.int(forKey: .userId)))
}
}
HStack(spacing: 8) {
Text("팔로잉 리스트")
.frame(maxWidth: .infinity)
.padding(.vertical, 13.3)
.font(.custom(Font.bold.rawValue, size: 15.3))
.foregroundColor(Color.grayee)
.cornerRadius(6.7)
.overlay(
RoundedRectangle(cornerRadius: 6.7)
.stroke(Color.button, lineWidth: 1)
)
.contentShape(Rectangle())
.onTapGesture {
AppState.shared.setAppStep(step: .followingList)
}
Text("차단 리스트")
.frame(maxWidth: .infinity)
.padding(.vertical, 13.3)
.font(.custom(Font.bold.rawValue, size: 15.3))
.foregroundColor(Color.grayee)
.cornerRadius(6.7)
.overlay(
RoundedRectangle(cornerRadius: 6.7)
.stroke(Color.button, lineWidth: 1)
)
.contentShape(Rectangle())
.onTapGesture {
AppState.shared.setAppStep(step: .blockList)
}
}
.padding(.top, 26.7)
.padding(.horizontal, 13.3)
if UserDefaults.int(forKey: .userId) != 17958 {
CanCardView(data: data) {
viewModel.getMypage()
}
.frame(width: screenSize().width - 26.7)
.padding(.top, 26.7)
}
if data.isAuth {
CanChargeCouponButtonView()
.frame(width: screenSize().width - 26.7)
.padding(.top, 13.3)
.onTapGesture {
AppState.shared.setAppStep(step: .canCoupon)
}
}
ReservationStatusView(data: data)
.padding(.top, 33.3)
if data.orderList.totalCount > 0 {
OrderListView(items: data.orderList.items)
.padding(.top, 40)
}
ServiceCenterButtonView()
.padding(.top, 40)
if !data.isAuth {
AuthButtonView()
.padding(.top, 40)
.onTapGesture {
viewModel.isShowAuthView = true
}
}
if let url = URL(string: "https://blog.naver.com/sodalive_official"),
UIApplication.shared.canOpenURL(url) {
Image("img_how_to_use")
.resizable()
.frame(
width: screenSize().width,
height: (200 * screenSize().width) / 1080
)
.padding(.vertical, 40)
.onTapGesture {
UIApplication.shared.open(url)
}
}
}
}
}
}
.frame(width: geo.size.width, height: geo.size.height)
}
.onAppear {
viewModel.getMypage()
}
}
}
.popup(isPresented: $viewModel.isShowPopup, type: .toast, position: .top, autohideIn: 2) {
GeometryReader { geo in
HStack {
Spacer()
Text(viewModel.errorMessage)
.padding(.vertical, 13.3)
.frame(width: geo.size.width - 66.7, alignment: .center)
.font(.custom(Font.medium.rawValue, size: 12))
.background(Color.button)
.foregroundColor(Color.white)
.multilineTextAlignment(.center)
.cornerRadius(20)
.padding(.top, 66.7)
Spacer()
}
}
}
.onAppear {
payload.applicationId = BOOTPAY_APP_ID
payload.price = 0
payload.pg = "다날"
payload.method = "본인인증"
payload.orderName = "본인인증"
payload.authenticationId = "\(UserDefaults.string(forKey: .nickname))__\(String(NSTimeIntervalSince1970))"
}
}
}
struct MyPageView_Previews: PreviewProvider {
static var previews: some View {
MyPageView()
}
}