[#460] Migrate AddressDetails to ReducerProtocol (#473)

- AddressDetails migrated to ReducerProtocol
This commit is contained in:
Lukas Korba 2022-11-07 11:53:05 +01:00 committed by GitHub
parent 13061e7a1a
commit 2afafb1b39
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 22 additions and 60 deletions

View File

@ -8,73 +8,35 @@
import Foundation import Foundation
import ComposableArchitecture import ComposableArchitecture
typealias AddressDetailsReducer = Reducer<AddressDetailsState, AddressDetailsAction, AddressDetailsEnvironment> typealias AddressDetailsStore = Store<AddressDetailsReducer.State, AddressDetailsReducer.Action>
typealias AddressDetailsStore = Store<AddressDetailsState, AddressDetailsAction>
typealias AddressDetailsViewStore = ViewStore<AddressDetailsState, AddressDetailsAction>
// MARK: - State struct AddressDetailsReducer: ReducerProtocol {
struct State: Equatable { }
struct AddressDetailsState: Equatable { enum Action: Equatable {
} case copyToPastboard(String)
}
// MARK: - Action
@Dependency(\.pasteboard) var pasteboard
enum AddressDetailsAction: Equatable {
case copyToPastboard(String) func reduce(into state: inout State, action: Action) -> ComposableArchitecture.EffectTask<Action> {
}
// MARK: - Environment
struct AddressDetailsEnvironment {
let pasteboard: WrappedPasteboard
}
extension AddressDetailsEnvironment {
static let live = AddressDetailsEnvironment(
pasteboard: .live
)
static let mock = AddressDetailsEnvironment(
pasteboard: .test
)
}
// MARK: - Reducer
extension AddressDetailsReducer {
static let `default` = AddressDetailsReducer { _, action, environment in
switch action { switch action {
case .copyToPastboard(let value): case .copyToPastboard(let value):
environment.pasteboard.setString(value) pasteboard.setString(value)
} }
return .none return .none
} }
} }
// MARK: - Store
extension AddressDetailsStore {
}
// MARK: - ViewStore
extension AddressDetailsViewStore {
}
// MARK: - Placeholders // MARK: - Placeholders
extension AddressDetailsState { extension AddressDetailsReducer.State {
static let placeholder = AddressDetailsState( static let placeholder = AddressDetailsReducer.State()
)
} }
extension AddressDetailsStore { extension AddressDetailsStore {
static let placeholder = AddressDetailsStore( static let placeholder = AddressDetailsStore(
initialState: .placeholder, initialState: .placeholder,
reducer: .default, reducer: AddressDetailsReducer()
environment: AddressDetailsEnvironment(
pasteboard: .test
)
) )
} }

View File

@ -6,6 +6,7 @@ typealias ProfileStore = Store<ProfileState, ProfileAction>
typealias ProfileViewStore = ViewStore<ProfileState, ProfileAction> typealias ProfileViewStore = ViewStore<ProfileState, ProfileAction>
typealias AnySettingsReducer = AnyReducer<SettingsReducer.State, SettingsReducer.Action, ProfileEnvironment> typealias AnySettingsReducer = AnyReducer<SettingsReducer.State, SettingsReducer.Action, ProfileEnvironment>
typealias AnyAddressDetailsReducer = AnyReducer<AddressDetailsReducer.State, AddressDetailsReducer.Action, ProfileEnvironment>
// MARK: - State // MARK: - State
@ -16,7 +17,7 @@ struct ProfileState: Equatable {
} }
var address = "" var address = ""
var addressDetailsState: AddressDetailsState var addressDetailsState: AddressDetailsReducer.State
var appBuild = "" var appBuild = ""
var appVersion = "" var appVersion = ""
var route: Route? var route: Route?
@ -27,7 +28,7 @@ struct ProfileState: Equatable {
// MARK: - Action // MARK: - Action
enum ProfileAction: Equatable { enum ProfileAction: Equatable {
case addressDetails(AddressDetailsAction) case addressDetails(AddressDetailsReducer.Action)
case back case back
case onAppear case onAppear
case settings(SettingsReducer.Action) case settings(SettingsReducer.Action)
@ -97,14 +98,13 @@ extension ProfileReducer {
} }
} }
private static let addressDetailsReducer: ProfileReducer = AddressDetailsReducer.default.pullback( private static let addressDetailsReducer: ProfileReducer = AnyAddressDetailsReducer { _ in
AddressDetailsReducer()
}
.pullback(
state: \ProfileState.addressDetailsState, state: \ProfileState.addressDetailsState,
action: /ProfileAction.addressDetails, action: /ProfileAction.addressDetails,
environment: { _ in environment: { $0 }
AddressDetailsEnvironment(
pasteboard: .live
)
}
) )
private static let settingsReducer: ProfileReducer = AnySettingsReducer { _ in private static let settingsReducer: ProfileReducer = AnySettingsReducer { _ in