rundfunk47 / stinsen

Coordinators in SwiftUI. Simple, powerful and elegant.
MIT License
822 stars 87 forks source link

How do I know which route I am in? #130

Open anthony1810 opened 6 months ago

anthony1810 commented 6 months ago

Let say I have a coordinator like this:

import Foundation
import RMStoreKit
import Stinsen
import SwiftUI

final class AccountCoordinator: NavigationCoordinatable {
    let stack = NavigationStack(initial: \AccountCoordinator.start)
    @Root var start = makeStart

    @Route(.fullScreen) var sports = makeSportScreen
    @Route(.push) var joinCodeTeam = makeJoinTeamScreen
    @Route(.push) var teamJoinCodeSettings = makeTeamJoinCodeSettingsScreen
    @Route(.fullScreen) var subscription = makeSubscriptionModal

    let mainViewModel: MainViewModel

    init(mainViewModel: MainViewModel) {
        self.mainViewModel = mainViewModel
    }

    @ViewBuilder
    func makeStart() -> some View {
        AccountsView()
            .environmentObject(mainViewModel)
    }

    func makeSportScreen() -> NavigationViewCoordinator<CreateTeamCoordinator> {
        NavigationViewCoordinator(
            CreateTeamCoordinator(sportsViewModel: ViewModelBuilder.build(), mainViewModel: mainViewModel)
        )
    }

    func makeJoinTeamScreen() -> some View {
        JoinTeamView()
            .environmentObject(mainViewModel)
    }

    @ViewBuilder
    func makeTeamJoinCodeSettingsScreen() -> some View {
        if let selectedTeam = mainViewModel.selectedTeam {
            TeamJoinCodeView(viewModel: TeamJoinCodeViewModel(team: selectedTeam))
                .environmentObject(mainViewModel)
        }
    }

    @ViewBuilder
    func makeSubscriptionModal() -> some View {
        RMSubscriptionModal()
    }
}

How do I detect which route I am current at so I can adjust my logic accordingly?

if (accountRouters?.isRoot(\.sports)).orFalse() {
// do something
} else {
// do something else
}