From 2d5973522f82f1691e3c86205bbcf609d4b6b241 Mon Sep 17 00:00:00 2001 From: Renaud Jenny Date: Thu, 6 Apr 2023 12:57:26 +0200 Subject: [PATCH] feat(Configuration): migrate Configuration to modern TCA --- telltime/TellTime/AppCore.swift | 10 +-- .../Configuration/Configuration.swift | 73 +++++++++---------- 2 files changed, 39 insertions(+), 44 deletions(-) diff --git a/telltime/TellTime/AppCore.swift b/telltime/TellTime/AppCore.swift index eba97c5..d55b16f 100644 --- a/telltime/TellTime/AppCore.swift +++ b/telltime/TellTime/AppCore.swift @@ -8,7 +8,7 @@ import TTSCore struct AppState: Equatable { var date: Date = Date() - var configuration = ConfigurationState() + var configuration = Configuration.State() var tts = TTS.State() var speechRecognizer = SpeechRecognizer.State() var isAboutPresented = false @@ -18,7 +18,7 @@ struct AppState: Equatable { enum AppAction: Equatable { case setDate(Date) case setRandomDate - case configuration(ConfigurationAction) + case configuration(Configuration.Action) case tts(TTS.Action) case speechRecognizer(SpeechRecognizer.Action) case appStarted @@ -36,11 +36,7 @@ struct AppEnvironment { } let appReducer = Reducer.combine( - configurationReducer.pullback( - state: \.configuration, - action: /AppAction.configuration, - environment: { _ in ConfigurationEnvironment() } - ), + AnyReducer(Configuration()).pullback(state: \.configuration, action: /AppAction.configuration, environment: { $0 }), AnyReducer(TTS()).pullback(state: \.tts, action: /AppAction.tts, environment: { $0 }), AnyReducer(SpeechRecognizer()).pullback( state: \.speechRecognizer, diff --git a/telltime/TellTime/Configuration/Configuration.swift b/telltime/TellTime/Configuration/Configuration.swift index 17a84f1..9768600 100644 --- a/telltime/TellTime/Configuration/Configuration.swift +++ b/telltime/TellTime/Configuration/Configuration.swift @@ -1,43 +1,42 @@ -import SwiftClockUI import ComposableArchitecture +import SwiftClockUI -struct ConfigurationState: Equatable { - var clock = ClockConfiguration() - var clockStyle: ClockStyle = .classic - var isPresented = false -} - -enum ConfigurationAction: Equatable { - case setMinuteIndicatorsShown(Bool) - case setHourIndicatorsShown(Bool) - case setLimitedHoursShown(Bool) - case setClockStyle(ClockStyle) - case present - case hide -} +struct Configuration: ReducerProtocol { + struct State: Equatable { + var clock = ClockConfiguration() + var clockStyle: ClockStyle = .classic + var isPresented = false + } -struct ConfigurationEnvironment { } + enum Action: Equatable { + case setMinuteIndicatorsShown(Bool) + case setHourIndicatorsShown(Bool) + case setLimitedHoursShown(Bool) + case setClockStyle(ClockStyle) + case present + case hide + } -typealias ConfigurationReducer = Reducer -let configurationReducer = ConfigurationReducer { state, action, _ in - switch action { - case let .setMinuteIndicatorsShown(isShown): - state.clock.isMinuteIndicatorsShown = isShown - return .none - case let .setHourIndicatorsShown(isShown): - state.clock.isHourIndicatorsShown = isShown - return .none - case let .setLimitedHoursShown(isShown): - state.clock.isLimitedHoursShown = isShown - return .none - case let .setClockStyle(clockStyle): - state.clockStyle = clockStyle - return .none - case .present: - state.isPresented = true - return .none - case .hide: - state.isPresented = false - return .none + func reduce(into state: inout State, action: Action) -> EffectTask { + switch action { + case let .setMinuteIndicatorsShown(isShown): + state.clock.isMinuteIndicatorsShown = isShown + return .none + case let .setHourIndicatorsShown(isShown): + state.clock.isHourIndicatorsShown = isShown + return .none + case let .setLimitedHoursShown(isShown): + state.clock.isLimitedHoursShown = isShown + return .none + case let .setClockStyle(clockStyle): + state.clockStyle = clockStyle + return .none + case .present: + state.isPresented = true + return .none + case .hide: + state.isPresented = false + return .none + } } }