88 lines
2.4 KiB
Swift
88 lines
2.4 KiB
Swift
import SwiftUI
|
|
|
|
@MainActor
|
|
enum AppRoute: Hashable {
|
|
case login
|
|
case avatarBox
|
|
case feedbackView
|
|
case feedbackDetail(type: FeedbackView.FeedbackType)
|
|
case mediaUpload
|
|
case blindBox(mediaType: BlindBoxMediaType, blindBoxId: String? = nil)
|
|
case blindOutcome(media: MediaType, title: String? = nil, description: String? = nil, isMember: Bool, goToFeedback: Bool = false)
|
|
case memories
|
|
case subscribe
|
|
case userInfo
|
|
case account
|
|
case about
|
|
case permissionManagement
|
|
case feedback
|
|
|
|
@ViewBuilder
|
|
var view: some View {
|
|
switch self {
|
|
case .login:
|
|
LoginView()
|
|
case .avatarBox:
|
|
// AvatarBoxView has been removed; route to BlindBoxView as replacement
|
|
BlindBoxView(mediaType: .all)
|
|
case .feedbackView:
|
|
FeedbackView()
|
|
case .feedbackDetail(let type):
|
|
FeedbackDetailView(feedbackType: type)
|
|
case .mediaUpload:
|
|
MediaUploadView()
|
|
case .blindBox(let mediaType, let blindBoxId):
|
|
BlindBoxView(mediaType: mediaType, blindBoxId: blindBoxId)
|
|
case .blindOutcome(let media, let title, let description, let isMember, let goToFeedback):
|
|
BlindOutcomeView(
|
|
media: media,
|
|
title: title,
|
|
description: description,
|
|
isMember: isMember,
|
|
onContinue: {
|
|
if goToFeedback {
|
|
Router.shared.navigate(to: .feedbackView)
|
|
} else {
|
|
Router.shared.navigate(to: .blindBox(mediaType: .all))
|
|
}
|
|
}
|
|
)
|
|
case .memories:
|
|
MemoriesView()
|
|
case .subscribe:
|
|
SubscribeView()
|
|
case .userInfo:
|
|
UserInfo()
|
|
case .account:
|
|
AccountView()
|
|
case .about:
|
|
AboutUsView()
|
|
case .permissionManagement:
|
|
PermissionManagementView()
|
|
case .feedback:
|
|
FeedbackView()
|
|
}
|
|
}
|
|
}
|
|
|
|
@MainActor
|
|
class Router: ObservableObject {
|
|
static let shared = Router()
|
|
|
|
@Published var path = NavigationPath()
|
|
|
|
private init() {}
|
|
|
|
func navigate(to destination: AppRoute) {
|
|
path.append(destination)
|
|
}
|
|
|
|
func pop() {
|
|
path.removeLast()
|
|
}
|
|
|
|
func popToRoot() {
|
|
path = NavigationPath()
|
|
}
|
|
}
|