diff --git a/apple/OmnivoreKit/Sources/Binders/Scenes/DebugMenuScene.swift b/apple/OmnivoreKit/Sources/Binders/Scenes/DebugMenuScene.swift index fd0ae8fb5..0d801befe 100644 --- a/apple/OmnivoreKit/Sources/Binders/Scenes/DebugMenuScene.swift +++ b/apple/OmnivoreKit/Sources/Binders/Scenes/DebugMenuScene.swift @@ -1,3 +1,5 @@ +import Combine +import Models import Services import SwiftUI import Views @@ -28,3 +30,77 @@ extension DebugMenuViewModel { .store(in: &subscriptions) } } + +public final class DebugMenuViewModel { + public enum Action { + case applyChanges(environment: DebugMenuEnvOption) + } + + let initialEnvironment: AppEnvironment + public var subscriptions = Set() + public let performActionSubject = PassthroughSubject() + + public init(initialEnvironment: AppEnvironment) { + self.initialEnvironment = initialEnvironment + } + + var initialDebugMenuEnvOption: DebugMenuEnvOption { + DebugMenuEnvOption.make(from: initialEnvironment) + } +} + +public enum DebugMenuEnvOption: String, CaseIterable { + case dev = "Dev" + case prod = "Prod" + case demo = "Demo" + case local = "Local" + + static func make(from appEnvironment: AppEnvironment) -> DebugMenuEnvOption { + switch appEnvironment { + case .local: + return .local + case .dev: + return .dev + case .prod: + return .prod + case .demo: + return .demo + case .test: + return .local + } + } +} + +public struct DebugMenuView: View { + @State private var selectedEnvironment: DebugMenuEnvOption + + private var viewModel: DebugMenuViewModel + + public init(viewModel: DebugMenuViewModel) { + self.viewModel = viewModel + self._selectedEnvironment = State(initialValue: viewModel.initialDebugMenuEnvOption) + } + + public var body: some View { + VStack { + Text("Debug Menu") + .font(.appTitle) + Form { + Text("API Environment:") + Picker(selection: $selectedEnvironment, label: Text("API Environment:")) { + ForEach(DebugMenuEnvOption.allCases, id: \.self) { + Text($0.rawValue) + } + } + .pickerStyle(SegmentedPickerStyle()) + } + + Button( + action: { viewModel.performActionSubject.send(.applyChanges(environment: selectedEnvironment)) }, + label: { Text("Apply Changes") } + ) + .buttonStyle(SolidCapsuleButtonStyle(width: 220)) + } + .padding() + } +} diff --git a/apple/OmnivoreKit/Sources/Views/Buttons/ButtonStyles.swift b/apple/OmnivoreKit/Sources/Views/Buttons/ButtonStyles.swift index 634d74045..64f72fcb7 100644 --- a/apple/OmnivoreKit/Sources/Views/Buttons/ButtonStyles.swift +++ b/apple/OmnivoreKit/Sources/Views/Buttons/ButtonStyles.swift @@ -1,17 +1,17 @@ import SwiftUI -struct SolidCapsuleButtonStyle: ButtonStyle { +public struct SolidCapsuleButtonStyle: ButtonStyle { let backgroundColor: Color let textColor: Color let width: CGFloat - init(color: Color = .blue, textColor: Color = .appGrayTextContrast, width: CGFloat = 220) { + public init(color: Color = .blue, textColor: Color = .appGrayTextContrast, width: CGFloat = 220) { self.backgroundColor = color self.textColor = textColor self.width = width } - func makeBody(configuration: Configuration) -> some View { + public func makeBody(configuration: Configuration) -> some View { configuration.label .font(.appBody) .foregroundColor(textColor) diff --git a/apple/OmnivoreKit/Sources/Views/DebugMenuView.swift b/apple/OmnivoreKit/Sources/Views/DebugMenuView.swift index c62b471ba..8b1378917 100644 --- a/apple/OmnivoreKit/Sources/Views/DebugMenuView.swift +++ b/apple/OmnivoreKit/Sources/Views/DebugMenuView.swift @@ -1,77 +1 @@ -import Combine -import Models -import SwiftUI -public final class DebugMenuViewModel { - public enum Action { - case applyChanges(environment: DebugMenuEnvOption) - } - - let initialEnvironment: AppEnvironment - public var subscriptions = Set() - public let performActionSubject = PassthroughSubject() - - public init(initialEnvironment: AppEnvironment) { - self.initialEnvironment = initialEnvironment - } - - var initialDebugMenuEnvOption: DebugMenuEnvOption { - DebugMenuEnvOption.make(from: initialEnvironment) - } -} - -public enum DebugMenuEnvOption: String, CaseIterable { - case dev = "Dev" - case prod = "Prod" - case demo = "Demo" - case local = "Local" - - static func make(from appEnvironment: AppEnvironment) -> DebugMenuEnvOption { - switch appEnvironment { - case .local: - return .local - case .dev: - return .dev - case .prod: - return .prod - case .demo: - return .demo - case .test: - return .local - } - } -} - -public struct DebugMenuView: View { - @State private var selectedEnvironment: DebugMenuEnvOption - - private var viewModel: DebugMenuViewModel - - public init(viewModel: DebugMenuViewModel) { - self.viewModel = viewModel - self._selectedEnvironment = State(initialValue: viewModel.initialDebugMenuEnvOption) - } - - public var body: some View { - VStack { - Text("Debug Menu") - .font(.appTitle) - Form { - Text("API Environment:") - Picker(selection: $selectedEnvironment, label: Text("API Environment:")) { - ForEach(DebugMenuEnvOption.allCases, id: \.self) { - Text($0.rawValue) - } - } - .pickerStyle(SegmentedPickerStyle()) - } - - Button( - action: { viewModel.performActionSubject.send(.applyChanges(environment: selectedEnvironment)) }, - label: { Text("Apply Changes") } - ) - .buttonStyle(SolidCapsuleButtonStyle(width: 220)) - } - .padding() - } -} diff --git a/apple/OmnivoreKit/Sources/Views/RegistrationViews/RegistrationViewModel.swift b/apple/OmnivoreKit/Sources/Views/RegistrationViews/RegistrationViewModel.swift index 1843ec0c7..9fc277e2a 100644 --- a/apple/OmnivoreKit/Sources/Views/RegistrationViews/RegistrationViewModel.swift +++ b/apple/OmnivoreKit/Sources/Views/RegistrationViews/RegistrationViewModel.swift @@ -13,8 +13,6 @@ public final class RegistrationViewModel: ObservableObject { @Published public var createProfileViewModel: CreateProfileViewModel? @Published public var newAppleSignupViewModel: NewAppleSignupViewModel? - public var debugMenuViewModel: DebugMenuViewModel? - public enum Action { case googleButtonTapped case appleSignInCompleted(result: Result)