Skip to content
Snippets Groups Projects
WelcomeView.swift 1.69 KiB
Newer Older
import AppCore
import ComposableArchitecture
import SwiftUI

public struct WelcomeView: View {
  public init(store: StoreOf<WelcomeComponent>) {
    self.store = store
  }

  let store: StoreOf<WelcomeComponent>

  struct ViewState: Equatable {
    init(_ state: WelcomeComponent.State) {
      isCreatingAccount = state.isCreatingAccount
      failure = state.failure
    }

    var isCreatingAccount: Bool
    var failure: String?
  }

  public var body: some View {
    WithViewStore(store, observe: ViewState.init) { viewStore in
      NavigationView {
        Form {
          Section {
            AppVersionText()
          } header: {
            Text("App version")
          if let failure = viewStore.failure {
            Section {
              Text(failure)
            } header: {
              Text("Error")
            }
          }

          Section {
            Button {
              viewStore.send(.newAccountTapped)
            } label: {
              HStack {
                Text("New Account")
                Spacer()
                if viewStore.isCreatingAccount {
                  ProgressView()
                }
              }
            }

            Button {
              viewStore.send(.restoreTapped)
            } label: {
              Text("Restore from Backup")
            }
          }
        }
        .disabled(viewStore.isCreatingAccount)
        .navigationTitle("Welcome")
      }
      .navigationViewStyle(.stack)
    }
  }
}

#if DEBUG
public struct WelcomeView_Previews: PreviewProvider {
  public static var previews: some View {
    WelcomeView(store: Store(
      initialState: WelcomeComponent.State(),
      reducer: EmptyReducer()