Skip to content
Snippets Groups Projects
Select Git revision
  • 9d3d86c8d2c685afee919113d08da1e2afe07325
  • main default protected
  • development
  • integration
  • v1.1.5
  • v1.1.4
  • v1.1.3
  • v1.1.2
  • v1.1.1
  • v1.1.0
  • v1.0.0
11 results

ClientStorage.swift

Blame
  • AppFeature.swift 3.35 KiB
    import AppCore
    import Combine
    import ComposableArchitecture
    import ComposablePresentation
    import Foundation
    import HomeFeature
    import RestoreFeature
    import WelcomeFeature
    import XXMessengerClient
    
    struct AppState: Equatable {
      enum Screen: Equatable {
        case loading
        case welcome(WelcomeState)
        case restore(RestoreState)
        case home(HomeState)
        case failure(String)
      }
    
      @BindableState var screen: Screen = .loading
    }
    
    extension AppState.Screen {
      var asWelcome: WelcomeState? {
        get { (/AppState.Screen.welcome).extract(from: self) }
        set { if let newValue = newValue { self = .welcome(newValue) } }
      }
      var asRestore: RestoreState? {
        get { (/AppState.Screen.restore).extract(from: self) }
        set { if let state = newValue { self = .restore(state) } }
      }
      var asHome: HomeState? {
        get { (/AppState.Screen.home).extract(from: self) }
        set { if let newValue = newValue { self = .home(newValue) } }
      }
    }
    
    enum AppAction: Equatable, BindableAction {
      case start
      case binding(BindingAction<AppState>)
      case welcome(WelcomeAction)
      case restore(RestoreAction)
      case home(HomeAction)
    }
    
    struct AppEnvironment {
      var dbManager: DBManager
      var messenger: Messenger
      var mainQueue: AnySchedulerOf<DispatchQueue>
      var bgQueue: AnySchedulerOf<DispatchQueue>
      var welcome: () -> WelcomeEnvironment
      var restore: () -> RestoreEnvironment
      var home: () -> HomeEnvironment
    }
    
    extension AppEnvironment {
      static let unimplemented = AppEnvironment(
        dbManager: .unimplemented,
        messenger: .unimplemented,
        mainQueue: .unimplemented,
        bgQueue: .unimplemented,
        welcome: { .unimplemented },
        restore: { .unimplemented },
        home: { .unimplemented }
      )
    }
    
    let appReducer = Reducer<AppState, AppAction, AppEnvironment>
    { state, action, env in
      switch action {