콘텐츠 메인, 라이브 메인, 오디션 메인, 마이페이지
- 로그인 하지 않고 페이지 조회가 되도록 수정
This commit is contained in:
		@@ -17,10 +17,12 @@ struct MyPageView: View {
 | 
			
		||||
    @StateObject var viewModel = MyPageViewModel()
 | 
			
		||||
    
 | 
			
		||||
    @State private var payload = Payload()
 | 
			
		||||
    @AppStorage("token") private var token: String = UserDefaults.string(forKey: UserDefaultsKey.token)
 | 
			
		||||
    
 | 
			
		||||
    var body: some View {
 | 
			
		||||
        BaseView(isLoading: $viewModel.isLoading) {
 | 
			
		||||
            if viewModel.isShowAuthView {
 | 
			
		||||
            if !token.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty &&
 | 
			
		||||
                viewModel.isShowAuthView {
 | 
			
		||||
                BootpayUI(payload: payload, requestType: BootpayRequest.TYPE_AUTHENTICATION)
 | 
			
		||||
                    .onConfirm {
 | 
			
		||||
                        DEBUG_LOG("onConfirm: \($0)")
 | 
			
		||||
@@ -47,100 +49,45 @@ struct MyPageView: View {
 | 
			
		||||
                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()
 | 
			
		||||
                            if !token.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty {
 | 
			
		||||
                                Image("ic_settings")
 | 
			
		||||
                                    .resizable()
 | 
			
		||||
                                    .frame(width: 20, height: 20)
 | 
			
		||||
                                    .onTapGesture {
 | 
			
		||||
                                        AppState.shared.setAppStep(step: .settings)
 | 
			
		||||
                                    }
 | 
			
		||||
                            }
 | 
			
		||||
                        ) {
 | 
			
		||||
                            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: 10.7) {
 | 
			
		||||
                                        Text("팔로잉 리스트")
 | 
			
		||||
                                            .font(.custom(Font.bold.rawValue, size: 14.7))
 | 
			
		||||
                                            .foregroundColor(Color.button)
 | 
			
		||||
                                            .frame(maxWidth: .infinity)
 | 
			
		||||
                                            .padding(.vertical, 13.3)
 | 
			
		||||
                                            .background(Color.bg)
 | 
			
		||||
                                            .cornerRadius(6.7)
 | 
			
		||||
                                            .overlay(
 | 
			
		||||
                                                RoundedRectangle(cornerRadius: 6.7)
 | 
			
		||||
                                                    .stroke(Color.button, lineWidth: 1.3)
 | 
			
		||||
                                            )
 | 
			
		||||
                                            .contentShape(Rectangle())
 | 
			
		||||
                                            .onTapGesture {
 | 
			
		||||
                                                AppState.shared.setAppStep(step: .followingList)
 | 
			
		||||
                                            }
 | 
			
		||||
                                        
 | 
			
		||||
                                        Text("차단 리스트")
 | 
			
		||||
                                            .font(.custom(Font.bold.rawValue, size: 14.7))
 | 
			
		||||
                                            .foregroundColor(Color.button)
 | 
			
		||||
                                            .frame(maxWidth: .infinity)
 | 
			
		||||
                                            .padding(.vertical, 13.3)
 | 
			
		||||
                                            .background(Color.bg)
 | 
			
		||||
                                            .cornerRadius(6.7)
 | 
			
		||||
                                            .overlay(
 | 
			
		||||
                                                RoundedRectangle(cornerRadius: 6.7)
 | 
			
		||||
                                                    .stroke(Color.button, lineWidth: 1.3)
 | 
			
		||||
                                            )
 | 
			
		||||
                                            .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) {
 | 
			
		||||
                        }
 | 
			
		||||
                        if !token.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty {
 | 
			
		||||
                            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, 26.7)
 | 
			
		||||
                                    }
 | 
			
		||||
                                    
 | 
			
		||||
                                    if data.isAuth {
 | 
			
		||||
                                        CanChargeCouponButtonView()
 | 
			
		||||
                                            .frame(width: screenSize().width - 26.7)
 | 
			
		||||
                                            .padding(.top, 13.3)
 | 
			
		||||
                                            .onTapGesture {
 | 
			
		||||
                                                AppState.shared.setAppStep(step: .canCoupon)
 | 
			
		||||
                                            }
 | 
			
		||||
                                    }
 | 
			
		||||
                                    
 | 
			
		||||
                                    VStack(alignment: .leading, spacing: 13.3) {
 | 
			
		||||
                                        Text("내 보관함")
 | 
			
		||||
                                            .font(.custom(Font.bold.rawValue, size: 18.3))
 | 
			
		||||
                                            .foregroundColor(Color.grayee)
 | 
			
		||||
                                        .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: 10.7) {
 | 
			
		||||
                                            Text("구매목록")
 | 
			
		||||
                                            Text("팔로잉 리스트")
 | 
			
		||||
                                                .font(.custom(Font.bold.rawValue, size: 14.7))
 | 
			
		||||
                                                .foregroundColor(Color.button)
 | 
			
		||||
                                                .frame(maxWidth: .infinity)
 | 
			
		||||
@@ -153,10 +100,10 @@ struct MyPageView: View {
 | 
			
		||||
                                                )
 | 
			
		||||
                                                .contentShape(Rectangle())
 | 
			
		||||
                                                .onTapGesture {
 | 
			
		||||
                                                    AppState.shared.setAppStep(step: .myBox(currentTab: .orderlist))
 | 
			
		||||
                                                    AppState.shared.setAppStep(step: .followingList)
 | 
			
		||||
                                                }
 | 
			
		||||
                                            
 | 
			
		||||
                                            Text("재생목록")
 | 
			
		||||
                                            Text("차단 리스트")
 | 
			
		||||
                                                .font(.custom(Font.bold.rawValue, size: 14.7))
 | 
			
		||||
                                                .foregroundColor(Color.button)
 | 
			
		||||
                                                .frame(maxWidth: .infinity)
 | 
			
		||||
@@ -169,26 +116,175 @@ struct MyPageView: View {
 | 
			
		||||
                                                )
 | 
			
		||||
                                                .contentShape(Rectangle())
 | 
			
		||||
                                                .onTapGesture {
 | 
			
		||||
                                                    AppState.shared.setAppStep(step: .myBox(currentTab: .playlist))
 | 
			
		||||
                                                    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)
 | 
			
		||||
                                                }
 | 
			
		||||
                                        }
 | 
			
		||||
                                        
 | 
			
		||||
                                        VStack(alignment: .leading, spacing: 13.3) {
 | 
			
		||||
                                            Text("내 보관함")
 | 
			
		||||
                                                .font(.custom(Font.bold.rawValue, size: 18.3))
 | 
			
		||||
                                                .foregroundColor(Color.grayee)
 | 
			
		||||
                                            
 | 
			
		||||
                                            HStack(spacing: 10.7) {
 | 
			
		||||
                                                Text("구매목록")
 | 
			
		||||
                                                    .font(.custom(Font.bold.rawValue, size: 14.7))
 | 
			
		||||
                                                    .foregroundColor(Color.button)
 | 
			
		||||
                                                    .frame(maxWidth: .infinity)
 | 
			
		||||
                                                    .padding(.vertical, 13.3)
 | 
			
		||||
                                                    .background(Color.bg)
 | 
			
		||||
                                                    .cornerRadius(6.7)
 | 
			
		||||
                                                    .overlay(
 | 
			
		||||
                                                        RoundedRectangle(cornerRadius: 6.7)
 | 
			
		||||
                                                            .stroke(Color.button, lineWidth: 1.3)
 | 
			
		||||
                                                    )
 | 
			
		||||
                                                    .contentShape(Rectangle())
 | 
			
		||||
                                                    .onTapGesture {
 | 
			
		||||
                                                        AppState.shared.setAppStep(step: .myBox(currentTab: .orderlist))
 | 
			
		||||
                                                    }
 | 
			
		||||
                                                
 | 
			
		||||
                                                Text("재생목록")
 | 
			
		||||
                                                    .font(.custom(Font.bold.rawValue, size: 14.7))
 | 
			
		||||
                                                    .foregroundColor(Color.button)
 | 
			
		||||
                                                    .frame(maxWidth: .infinity)
 | 
			
		||||
                                                    .padding(.vertical, 13.3)
 | 
			
		||||
                                                    .background(Color.bg)
 | 
			
		||||
                                                    .cornerRadius(6.7)
 | 
			
		||||
                                                    .overlay(
 | 
			
		||||
                                                        RoundedRectangle(cornerRadius: 6.7)
 | 
			
		||||
                                                            .stroke(Color.button, lineWidth: 1.3)
 | 
			
		||||
                                                    )
 | 
			
		||||
                                                    .contentShape(Rectangle())
 | 
			
		||||
                                                    .onTapGesture {
 | 
			
		||||
                                                        AppState.shared.setAppStep(step: .myBox(currentTab: .playlist))
 | 
			
		||||
                                                    }
 | 
			
		||||
                                            }
 | 
			
		||||
                                        }
 | 
			
		||||
                                        .padding(.top, 33)
 | 
			
		||||
                                        .padding(.horizontal, 13.3)
 | 
			
		||||
                                        
 | 
			
		||||
                                        ReservationStatusView(data: data)
 | 
			
		||||
                                            .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)
 | 
			
		||||
                                                }
 | 
			
		||||
                                        }
 | 
			
		||||
                                    }
 | 
			
		||||
                                    .padding(.top, 33)
 | 
			
		||||
                                }
 | 
			
		||||
                            }
 | 
			
		||||
                        } else {
 | 
			
		||||
                            ScrollView(.vertical, showsIndicators: false) {
 | 
			
		||||
                                VStack(spacing: 24) {
 | 
			
		||||
                                    HStack(spacing: 6.7) {
 | 
			
		||||
                                        Image("ic_logo_circle_gray")
 | 
			
		||||
                                        
 | 
			
		||||
                                        Text("Login")
 | 
			
		||||
                                            .font(.custom(Font.medium.rawValue, size: 32))
 | 
			
		||||
                                            .foregroundColor(.gray90)
 | 
			
		||||
                                    }
 | 
			
		||||
                                    .padding(20)
 | 
			
		||||
                                    .frame(maxWidth: .infinity)
 | 
			
		||||
                                    .background(Color.bg)
 | 
			
		||||
                                    .cornerRadius(6.7)
 | 
			
		||||
                                    .contentShape(Rectangle())
 | 
			
		||||
                                    .padding(.horizontal, 13.3)
 | 
			
		||||
                                    .padding(.top, 24)
 | 
			
		||||
                                    .onTapGesture {
 | 
			
		||||
                                        AppState.shared
 | 
			
		||||
                                            .setAppStep(step: .login)
 | 
			
		||||
                                    }
 | 
			
		||||
                                    
 | 
			
		||||
                                    HStack(spacing: 0) {
 | 
			
		||||
                                        HStack(spacing: 6.7) {
 | 
			
		||||
                                            Text("0")
 | 
			
		||||
                                                .font(.custom(Font.bold.rawValue, size: 18.3))
 | 
			
		||||
                                                .foregroundColor(.grayee)
 | 
			
		||||
                                            
 | 
			
		||||
                                            Image("ic_can")
 | 
			
		||||
                                                .resizable()
 | 
			
		||||
                                                .frame(width: 20, height: 20)
 | 
			
		||||
                                            
 | 
			
		||||
                                            Image("ic_forward")
 | 
			
		||||
                                                .resizable()
 | 
			
		||||
                                                .frame(width: 20, height: 20)
 | 
			
		||||
                                        }
 | 
			
		||||
                                        .onTapGesture {
 | 
			
		||||
                                            AppState.shared
 | 
			
		||||
                                                .setAppStep(step: .login)
 | 
			
		||||
                                        }
 | 
			
		||||
                                        
 | 
			
		||||
                                        Spacer()
 | 
			
		||||
                                        
 | 
			
		||||
                                        HStack(spacing: 7) {
 | 
			
		||||
                                            Image("ic_coin_w")
 | 
			
		||||
                                                .resizable()
 | 
			
		||||
                                                .frame(width: 26.7, height: 26.7)
 | 
			
		||||
                                            
 | 
			
		||||
                                            Text("충전")
 | 
			
		||||
                                                .font(.custom(Font.bold.rawValue, size: 12))
 | 
			
		||||
                                                .foregroundColor(Color(hex: "b38fff"))
 | 
			
		||||
                                        }
 | 
			
		||||
                                        .padding(.horizontal, 11.3)
 | 
			
		||||
                                        .padding(.vertical, 7)
 | 
			
		||||
                                        .overlay(
 | 
			
		||||
                                            RoundedRectangle(cornerRadius: CGFloat(16.7))
 | 
			
		||||
                                                .stroke(lineWidth: 1)
 | 
			
		||||
                                                .foregroundColor(Color(hex: "b38fff"))
 | 
			
		||||
                                        )
 | 
			
		||||
                                        .cornerRadius(16.7)
 | 
			
		||||
                                        .onTapGesture {
 | 
			
		||||
                                            AppState.shared
 | 
			
		||||
                                                .setAppStep(step: .login)
 | 
			
		||||
                                        }
 | 
			
		||||
                                    }
 | 
			
		||||
                                    .frame(maxWidth: .infinity)
 | 
			
		||||
                                    .padding(.horizontal, 13.3)
 | 
			
		||||
                                    .padding(.vertical, 10)
 | 
			
		||||
                                    .background(Color.gray22)
 | 
			
		||||
                                    .cornerRadius(6.7)
 | 
			
		||||
                                    .padding(.horizontal, 13.3)
 | 
			
		||||
                                    
 | 
			
		||||
                                    ReservationStatusView(data: data)
 | 
			
		||||
                                        .padding(.top, 40)
 | 
			
		||||
                                    
 | 
			
		||||
                                    ServiceCenterButtonView()
 | 
			
		||||
                                        .padding(.top, 40)
 | 
			
		||||
                                    
 | 
			
		||||
                                    if !data.isAuth {
 | 
			
		||||
                                        AuthButtonView()
 | 
			
		||||
                                            .padding(.top, 40)
 | 
			
		||||
                                            .onTapGesture {
 | 
			
		||||
                                                viewModel.isShowAuthView = true
 | 
			
		||||
                                            }
 | 
			
		||||
                                    }
 | 
			
		||||
                                        .padding(.horizontal, 13.3)
 | 
			
		||||
                                    
 | 
			
		||||
                                    if let url = URL(string: "https://blog.naver.com/sodalive_official"),
 | 
			
		||||
                                       UIApplication.shared.canOpenURL(url) {
 | 
			
		||||
@@ -198,7 +294,6 @@ struct MyPageView: View {
 | 
			
		||||
                                                width: screenSize().width,
 | 
			
		||||
                                                height: (200 * screenSize().width) / 1080
 | 
			
		||||
                                            )
 | 
			
		||||
                                            .padding(.vertical, 40)
 | 
			
		||||
                                            .onTapGesture {
 | 
			
		||||
                                                UIApplication.shared.open(url)
 | 
			
		||||
                                            }
 | 
			
		||||
@@ -210,7 +305,9 @@ struct MyPageView: View {
 | 
			
		||||
                    .frame(width: geo.size.width, height: geo.size.height)
 | 
			
		||||
                }
 | 
			
		||||
                .onAppear {
 | 
			
		||||
                    viewModel.getMypage()
 | 
			
		||||
                    if !token.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty {
 | 
			
		||||
                        viewModel.getMypage()
 | 
			
		||||
                    }
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user