mirror of
https://github.com/omnivore-app/omnivore.git
synced 2026-03-11 08:54:26 +00:00
move DebugMenuView to binders package
This commit is contained in:
parent
aa355088d2
commit
677a315778
4 changed files with 79 additions and 81 deletions
|
|
@ -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<AnyCancellable>()
|
||||
public let performActionSubject = PassthroughSubject<Action, Never>()
|
||||
|
||||
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()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
|
|
@ -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<AnyCancellable>()
|
||||
public let performActionSubject = PassthroughSubject<Action, Never>()
|
||||
|
||||
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()
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<ASAuthorization, Error>)
|
||||
|
|
|
|||
Loading…
Reference in a new issue