|
@@ -3,9 +3,15 @@ import Swinject
|
|
|
|
|
|
|
|
/// The main onboarding view that manages navigation between onboarding steps.
|
|
/// The main onboarding view that manages navigation between onboarding steps.
|
|
|
extension Onboarding {
|
|
extension Onboarding {
|
|
|
|
|
+ private enum NavigationDirection {
|
|
|
|
|
+ case forward
|
|
|
|
|
+ case backward
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
struct RootView: BaseView {
|
|
struct RootView: BaseView {
|
|
|
let resolver: Resolver
|
|
let resolver: Resolver
|
|
|
@State var state = StateModel()
|
|
@State var state = StateModel()
|
|
|
|
|
+ @State private var navigationDirection: NavigationDirection = .forward
|
|
|
let onboardingManager: OnboardingManager
|
|
let onboardingManager: OnboardingManager
|
|
|
@State private var currentStep: OnboardingStep = .welcome
|
|
@State private var currentStep: OnboardingStep = .welcome
|
|
|
@State private var currentDeliverySubstep: DeliveryLimitSubstep = .maxIOB
|
|
@State private var currentDeliverySubstep: DeliveryLimitSubstep = .maxIOB
|
|
@@ -157,7 +163,11 @@ extension Onboarding {
|
|
|
CompletedStepView()
|
|
CompletedStepView()
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
- .transition(.asymmetric(insertion: .move(edge: .trailing), removal: .move(edge: .leading)))
|
|
|
|
|
|
|
+ .transition(
|
|
|
|
|
+ navigationDirection == .forward
|
|
|
|
|
+ ? .asymmetric(insertion: .move(edge: .trailing), removal: .move(edge: .leading))
|
|
|
|
|
+ : .asymmetric(insertion: .move(edge: .leading), removal: .move(edge: .trailing))
|
|
|
|
|
+ )
|
|
|
.padding(.horizontal)
|
|
.padding(.horizontal)
|
|
|
.id(currentStep.id) // Force view recreation when step changes
|
|
.id(currentStep.id) // Force view recreation when step changes
|
|
|
}
|
|
}
|
|
@@ -181,6 +191,7 @@ extension Onboarding {
|
|
|
// Back button
|
|
// Back button
|
|
|
if currentStep != .welcome {
|
|
if currentStep != .welcome {
|
|
|
Button(action: {
|
|
Button(action: {
|
|
|
|
|
+ navigationDirection = .backward
|
|
|
withAnimation {
|
|
withAnimation {
|
|
|
if currentStep == .completed {
|
|
if currentStep == .completed {
|
|
|
currentStep = .deliveryLimits
|
|
currentStep = .deliveryLimits
|
|
@@ -228,6 +239,7 @@ extension Onboarding {
|
|
|
|
|
|
|
|
// Next/Finish button
|
|
// Next/Finish button
|
|
|
Button(action: {
|
|
Button(action: {
|
|
|
|
|
+ navigationDirection = .forward
|
|
|
withAnimation {
|
|
withAnimation {
|
|
|
if currentStep == .completed {
|
|
if currentStep == .completed {
|
|
|
state.saveOnboardingData()
|
|
state.saveOnboardingData()
|