import Combine final class StartMiddleware { static let shared = StartMiddleware() func middleware(state: AppState, action: AppAction) -> AnyPublisher { switch action { case .accountsAction(.accountsListUpdated(let accounts)): if accounts.isEmpty { if state.currentFlow == .start { return Just(.startAction(.goTo(.welcomeScreen))) .eraseToAnyPublisher() } else { return Empty().eraseToAnyPublisher() } } else { if state.currentFlow == .accounts, state.accountsState.navigation == .addAccount { return Just(.changeFlow(.chats)) .eraseToAnyPublisher() } else if state.currentFlow == .start { return Just(.changeFlow(.chats)) .eraseToAnyPublisher() } else { return Empty().eraseToAnyPublisher() } } default: return Empty().eraseToAnyPublisher() } } }