Skip to content
Snippets Groups Projects
Select Git revision
  • 6ef6b268f39b1ccdd0476989c4d07d7950016b68
  • release default protected
  • 11-22-implement-kv-interface-defined-in-collectiveversionedkvgo
  • hotfix/TestHostPool_UpdateNdf_AddFilter
  • XX-4719/announcementChannels
  • xx-4717/logLevel
  • jonah/noob-channel
  • master protected
  • XX-4707/tagDiskJson
  • xx-4698/notification-retry
  • hotfix/notifylockup
  • syncNodes
  • hotfix/localCB
  • XX-4677/NewChanManagerMobile
  • XX-4689/DmSync
  • duplicatePrefix
  • XX-4601/HavenInvites
  • finalizedUICallbacks
  • XX-4673/AdminKeySync
  • debugNotifID
  • anne/test
  • v4.7.5
  • v4.7.4
  • v4.7.3
  • v4.7.2
  • v4.7.1
  • v4.6.3
  • v4.6.1
  • v4.5.0
  • v4.4.4
  • v4.3.11
  • v4.3.8
  • v4.3.7
  • v4.3.6
  • v4.3.5
  • v4.2.0
  • v4.3.0
  • v4.3.4
  • v4.3.3
  • v4.3.2
  • v4.3.1
41 results

jsonStorage.go

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 {