91 lines
2.6 KiB
Swift
91 lines
2.6 KiB
Swift
//
|
|
// OnboardingNavigationButtons.swift
|
|
// secant-testnet
|
|
//
|
|
// Created by Adam Stener on 11/18/21.
|
|
//
|
|
|
|
import SwiftUI
|
|
import ComposableArchitecture
|
|
|
|
struct OnboardingHeaderView: View {
|
|
struct ViewState: Equatable {
|
|
let isInitialStep: Bool
|
|
let isFinalStep: Bool
|
|
}
|
|
|
|
enum ViewAction {
|
|
case back
|
|
case skip
|
|
}
|
|
|
|
let store: Store<ViewState, ViewAction>
|
|
let animationDuration: CGFloat = 0.8
|
|
|
|
var body: some View {
|
|
WithViewStore(self.store) { viewStore in
|
|
VStack {
|
|
HStack {
|
|
if !viewStore.isInitialStep {
|
|
Button("Back") {
|
|
withAnimation(.easeInOut(duration: animationDuration)) {
|
|
viewStore.send(.back)
|
|
}
|
|
}
|
|
.navigationButtonStyle
|
|
.disabled(viewStore.isInitialStep)
|
|
.frame(width: 75)
|
|
}
|
|
|
|
Spacer()
|
|
|
|
if !viewStore.isFinalStep {
|
|
Button("Skip") {
|
|
withAnimation(.easeInOut(duration: animationDuration)) {
|
|
viewStore.send(.skip)
|
|
}
|
|
}
|
|
.navigationButtonStyle
|
|
.disabled(viewStore.isFinalStep)
|
|
.frame(width: 75)
|
|
}
|
|
}
|
|
.padding(.horizontal, 30)
|
|
.frame(height: 40)
|
|
|
|
Spacer()
|
|
}
|
|
.padding(.top, 5)
|
|
}
|
|
}
|
|
}
|
|
|
|
struct OnboardingHeaderView_Previews: PreviewProvider {
|
|
static var previews: some View {
|
|
let store = Store<OnboardingState, OnboardingAction>(
|
|
initialState: OnboardingState(index: 0),
|
|
reducer: OnboardingReducer.default,
|
|
environment: ()
|
|
)
|
|
|
|
OnboardingHeaderView(
|
|
store: store.scope(
|
|
state: { state in
|
|
OnboardingHeaderView.ViewState(
|
|
isInitialStep: state.isInitialStep,
|
|
isFinalStep: state.isFinalStep
|
|
)
|
|
},
|
|
action: { action in
|
|
switch action {
|
|
case .back: return .back
|
|
case .skip: return .skip
|
|
}
|
|
}
|
|
)
|
|
)
|
|
.preferredColorScheme(.light)
|
|
.applyScreenBackground()
|
|
}
|
|
}
|