import ComposableArchitecture import ComposablePresentation import ElixxirDAppsSDK import ErrorFeature import SwiftUI public struct SessionView: View { public init(store: Store<SessionState, SessionAction>) { self.store = store } let store: Store<SessionState, SessionAction> struct ViewState: Equatable { let networkFollowerStatus: NetworkFollowerStatus? let isNetworkHealthy: Bool? init(state: SessionState) { networkFollowerStatus = state.networkFollowerStatus isNetworkHealthy = state.isNetworkHealthy } } public var body: some View { WithViewStore(store.scope(state: ViewState.init)) { viewStore in Form { Section { NetworkFollowerStatusView(status: viewStore.networkFollowerStatus) Button { viewStore.send(.runNetworkFollower(true)) } label: { Text("Start") } .disabled(viewStore.networkFollowerStatus != .stopped) Button { viewStore.send(.runNetworkFollower(false)) } label: { Text("Stop") } .disabled(viewStore.networkFollowerStatus != .running) } header: { Text("Network follower") } Section { NetworkHealthStatusView(status: viewStore.isNetworkHealthy) } header: { Text("Network health") } } .navigationTitle("Session") .task { viewStore.send(.viewDidLoad) } .sheet( store.scope( state: \.error, action: SessionAction.error ), onDismiss: { viewStore.send(.didDismissError) }, content: ErrorView.init(store:) ) } } } #if DEBUG public struct SessionView_Previews: PreviewProvider { public static var previews: some View { SessionView(store: .init( initialState: .init(id: UUID()), reducer: .empty, environment: () )) } } #endif