diff --git a/.swiftformat b/.swiftformat index 024e43468..1873b0a6d 100644 --- a/.swiftformat +++ b/.swiftformat @@ -1,6 +1,6 @@ --swiftversion 5.6 ---exclude CommonKit, Config, DesignKit, Riot, RiotNSE, RiotShareExtension, RiotTests, SiriIntents, Tools, Variants, vendor +--exclude build, CommonKit, Config, DesignKit, fastlane, Pods, Riot, RiotNSE, RiotShareExtension, RiotTests, SiriIntents, Tools, Variants, vendor --disable wrapMultiLineStatementBraces --disable hoistPatternLet diff --git a/RiotSwiftUI/Modules/AnalyticsPrompt/AnalyticsPromptViewModel.swift b/RiotSwiftUI/Modules/AnalyticsPrompt/AnalyticsPromptViewModel.swift index 295aa27f0..ab2937f62 100644 --- a/RiotSwiftUI/Modules/AnalyticsPrompt/AnalyticsPromptViewModel.swift +++ b/RiotSwiftUI/Modules/AnalyticsPrompt/AnalyticsPromptViewModel.swift @@ -17,7 +17,7 @@ import Combine import SwiftUI -typealias AnalyticsPromptViewModelType = StateStoreViewModel +typealias AnalyticsPromptViewModelType = StateStoreViewModel class AnalyticsPromptViewModel: AnalyticsPromptViewModelType { // MARK: - Properties diff --git a/RiotSwiftUI/Modules/Authentication/ChoosePassword/AuthenticationChoosePasswordViewModel.swift b/RiotSwiftUI/Modules/Authentication/ChoosePassword/AuthenticationChoosePasswordViewModel.swift index 9301a96d2..328b17161 100644 --- a/RiotSwiftUI/Modules/Authentication/ChoosePassword/AuthenticationChoosePasswordViewModel.swift +++ b/RiotSwiftUI/Modules/Authentication/ChoosePassword/AuthenticationChoosePasswordViewModel.swift @@ -16,7 +16,7 @@ import SwiftUI -typealias AuthenticationChoosePasswordViewModelType = StateStoreViewModel +typealias AuthenticationChoosePasswordViewModelType = StateStoreViewModel class AuthenticationChoosePasswordViewModel: AuthenticationChoosePasswordViewModelType, AuthenticationChoosePasswordViewModelProtocol { // MARK: - Properties diff --git a/RiotSwiftUI/Modules/Authentication/ForgotPassword/AuthenticationForgotPasswordViewModel.swift b/RiotSwiftUI/Modules/Authentication/ForgotPassword/AuthenticationForgotPasswordViewModel.swift index c9b393f7b..e9ec459b3 100644 --- a/RiotSwiftUI/Modules/Authentication/ForgotPassword/AuthenticationForgotPasswordViewModel.swift +++ b/RiotSwiftUI/Modules/Authentication/ForgotPassword/AuthenticationForgotPasswordViewModel.swift @@ -16,7 +16,7 @@ import SwiftUI -typealias AuthenticationForgotPasswordViewModelType = StateStoreViewModel +typealias AuthenticationForgotPasswordViewModelType = StateStoreViewModel class AuthenticationForgotPasswordViewModel: AuthenticationForgotPasswordViewModelType, AuthenticationForgotPasswordViewModelProtocol { // MARK: - Properties diff --git a/RiotSwiftUI/Modules/Authentication/Login/AuthenticationLoginViewModel.swift b/RiotSwiftUI/Modules/Authentication/Login/AuthenticationLoginViewModel.swift index 999fd0bf2..6c5274d62 100644 --- a/RiotSwiftUI/Modules/Authentication/Login/AuthenticationLoginViewModel.swift +++ b/RiotSwiftUI/Modules/Authentication/Login/AuthenticationLoginViewModel.swift @@ -16,7 +16,7 @@ import SwiftUI -typealias AuthenticationLoginViewModelType = StateStoreViewModel +typealias AuthenticationLoginViewModelType = StateStoreViewModel class AuthenticationLoginViewModel: AuthenticationLoginViewModelType, AuthenticationLoginViewModelProtocol { // MARK: - Properties diff --git a/RiotSwiftUI/Modules/Authentication/ReCaptcha/AuthenticationReCaptchaViewModel.swift b/RiotSwiftUI/Modules/Authentication/ReCaptcha/AuthenticationReCaptchaViewModel.swift index d1ce75bec..755675e1f 100644 --- a/RiotSwiftUI/Modules/Authentication/ReCaptcha/AuthenticationReCaptchaViewModel.swift +++ b/RiotSwiftUI/Modules/Authentication/ReCaptcha/AuthenticationReCaptchaViewModel.swift @@ -16,7 +16,7 @@ import SwiftUI -typealias AuthenticationReCaptchaViewModelType = StateStoreViewModel +typealias AuthenticationReCaptchaViewModelType = StateStoreViewModel class AuthenticationReCaptchaViewModel: AuthenticationReCaptchaViewModelType, AuthenticationReCaptchaViewModelProtocol { // MARK: - Properties diff --git a/RiotSwiftUI/Modules/Authentication/Registration/AuthenticationRegistrationViewModel.swift b/RiotSwiftUI/Modules/Authentication/Registration/AuthenticationRegistrationViewModel.swift index 7052eee81..dcfe72a7a 100644 --- a/RiotSwiftUI/Modules/Authentication/Registration/AuthenticationRegistrationViewModel.swift +++ b/RiotSwiftUI/Modules/Authentication/Registration/AuthenticationRegistrationViewModel.swift @@ -17,7 +17,7 @@ import Combine import SwiftUI -typealias AuthenticationRegistrationViewModelType = StateStoreViewModel +typealias AuthenticationRegistrationViewModelType = StateStoreViewModel class AuthenticationRegistrationViewModel: AuthenticationRegistrationViewModelType, AuthenticationRegistrationViewModelProtocol { // MARK: - Properties diff --git a/RiotSwiftUI/Modules/Authentication/ServerSelection/AuthenticationServerSelectionViewModel.swift b/RiotSwiftUI/Modules/Authentication/ServerSelection/AuthenticationServerSelectionViewModel.swift index a30aedc21..b7c6d7c09 100644 --- a/RiotSwiftUI/Modules/Authentication/ServerSelection/AuthenticationServerSelectionViewModel.swift +++ b/RiotSwiftUI/Modules/Authentication/ServerSelection/AuthenticationServerSelectionViewModel.swift @@ -16,7 +16,7 @@ import SwiftUI -typealias AuthenticationServerSelectionViewModelType = StateStoreViewModel +typealias AuthenticationServerSelectionViewModelType = StateStoreViewModel class AuthenticationServerSelectionViewModel: AuthenticationServerSelectionViewModelType, AuthenticationServerSelectionViewModelProtocol { // MARK: - Properties diff --git a/RiotSwiftUI/Modules/Authentication/SoftLogout/AuthenticationSoftLogoutViewModel.swift b/RiotSwiftUI/Modules/Authentication/SoftLogout/AuthenticationSoftLogoutViewModel.swift index 7de0f590c..f5b7971dc 100644 --- a/RiotSwiftUI/Modules/Authentication/SoftLogout/AuthenticationSoftLogoutViewModel.swift +++ b/RiotSwiftUI/Modules/Authentication/SoftLogout/AuthenticationSoftLogoutViewModel.swift @@ -16,7 +16,7 @@ import SwiftUI -typealias AuthenticationSoftLogoutViewModelType = StateStoreViewModel +typealias AuthenticationSoftLogoutViewModelType = StateStoreViewModel class AuthenticationSoftLogoutViewModel: AuthenticationSoftLogoutViewModelType, AuthenticationSoftLogoutViewModelProtocol { // MARK: - Properties diff --git a/RiotSwiftUI/Modules/Authentication/Terms/AuthenticationTermsViewModel.swift b/RiotSwiftUI/Modules/Authentication/Terms/AuthenticationTermsViewModel.swift index 7a81cc935..275eded69 100644 --- a/RiotSwiftUI/Modules/Authentication/Terms/AuthenticationTermsViewModel.swift +++ b/RiotSwiftUI/Modules/Authentication/Terms/AuthenticationTermsViewModel.swift @@ -16,7 +16,7 @@ import SwiftUI -typealias AuthenticationTermsViewModelType = StateStoreViewModel +typealias AuthenticationTermsViewModelType = StateStoreViewModel class AuthenticationTermsViewModel: AuthenticationTermsViewModelType, AuthenticationTermsViewModelProtocol { // MARK: - Properties diff --git a/RiotSwiftUI/Modules/Authentication/VerifyEmail/AuthenticationVerifyEmailViewModel.swift b/RiotSwiftUI/Modules/Authentication/VerifyEmail/AuthenticationVerifyEmailViewModel.swift index 44c70494e..b3a31d585 100644 --- a/RiotSwiftUI/Modules/Authentication/VerifyEmail/AuthenticationVerifyEmailViewModel.swift +++ b/RiotSwiftUI/Modules/Authentication/VerifyEmail/AuthenticationVerifyEmailViewModel.swift @@ -16,7 +16,7 @@ import SwiftUI -typealias AuthenticationVerifyEmailViewModelType = StateStoreViewModel +typealias AuthenticationVerifyEmailViewModelType = StateStoreViewModel class AuthenticationVerifyEmailViewModel: AuthenticationVerifyEmailViewModelType, AuthenticationVerifyEmailViewModelProtocol { // MARK: - Properties diff --git a/RiotSwiftUI/Modules/Authentication/VerifyMsisdn/AuthenticationVerifyMsisdnViewModel.swift b/RiotSwiftUI/Modules/Authentication/VerifyMsisdn/AuthenticationVerifyMsisdnViewModel.swift index 28aac8414..354813296 100644 --- a/RiotSwiftUI/Modules/Authentication/VerifyMsisdn/AuthenticationVerifyMsisdnViewModel.swift +++ b/RiotSwiftUI/Modules/Authentication/VerifyMsisdn/AuthenticationVerifyMsisdnViewModel.swift @@ -16,7 +16,7 @@ import SwiftUI -typealias AuthenticationVerifyMsisdnViewModelType = StateStoreViewModel +typealias AuthenticationVerifyMsisdnViewModelType = StateStoreViewModel class AuthenticationVerifyMsisdnViewModel: AuthenticationVerifyMsisdnViewModelType, AuthenticationVerifyMsisdnViewModelProtocol { // MARK: - Properties diff --git a/RiotSwiftUI/Modules/Common/ViewModel/StateStoreViewModel.swift b/RiotSwiftUI/Modules/Common/ViewModel/StateStoreViewModel.swift index 30641c7f9..dd1b27d3e 100644 --- a/RiotSwiftUI/Modules/Common/ViewModel/StateStoreViewModel.swift +++ b/RiotSwiftUI/Modules/Common/ViewModel/StateStoreViewModel.swift @@ -73,7 +73,7 @@ class ViewModelContext: ObservableObject { /// a specific portion of state that can be safely bound to. /// If we decide to add more features to our state management (like doing state processing off the main thread) /// we can do it in this centralised place. -class StateStoreViewModel { +class StateStoreViewModel { typealias Context = ViewModelContext // MARK: - Properties @@ -104,34 +104,6 @@ class StateStoreViewModel { .store(in: &cancellables) } - /// Send state actions to modify the state within the reducer. - /// - Parameter action: The state action to send to the reducer. - @available(*, deprecated, message: "Mutate state directly instead") - func dispatch(action: StateAction) { - Self.reducer(state: &context.viewState, action: action) - } - - /// Send state actions from a publisher to modify the state within the reducer. - /// - Parameter actionPublisher: The publisher that produces actions to be sent to the reducer - @available(*, deprecated, message: "Mutate state directly instead") - func dispatch(actionPublisher: AnyPublisher) { - actionPublisher.sink { [weak self] action in - guard let self = self else { return } - Self.reducer(state: &self.context.viewState, action: action) - } - .store(in: &cancellables) - } - - /// Override to handle mutations to the `State` - /// - /// A redux style reducer, all modifications to state happen here. - /// - Parameters: - /// - state: The `inout` state to be modified, - /// - action: The action that defines which state modification should take place. - class func reducer(state: inout State, action: StateAction) { - // Default implementation, -no-op - } - /// Override to handles incoming `ViewAction`s from the `ViewModel`. /// - Parameter viewAction: The `ViewAction` to be processed in `ViewModel` implementation. func process(viewAction: ViewAction) { diff --git a/RiotSwiftUI/Modules/LocationSharing/LiveLocationLabPromotion/LiveLocationLabPromotionViewModel.swift b/RiotSwiftUI/Modules/LocationSharing/LiveLocationLabPromotion/LiveLocationLabPromotionViewModel.swift index b9572846a..e3408be02 100644 --- a/RiotSwiftUI/Modules/LocationSharing/LiveLocationLabPromotion/LiveLocationLabPromotionViewModel.swift +++ b/RiotSwiftUI/Modules/LocationSharing/LiveLocationLabPromotion/LiveLocationLabPromotionViewModel.swift @@ -16,7 +16,7 @@ import SwiftUI -typealias LiveLocationLabPromotionViewModelType = StateStoreViewModel +typealias LiveLocationLabPromotionViewModelType = StateStoreViewModel class LiveLocationLabPromotionViewModel: LiveLocationLabPromotionViewModelType, LiveLocationLabPromotionViewModelProtocol { // MARK: - Properties diff --git a/RiotSwiftUI/Modules/LocationSharing/LiveLocationSharingViewer/LiveLocationSharingViewerViewModel.swift b/RiotSwiftUI/Modules/LocationSharing/LiveLocationSharingViewer/LiveLocationSharingViewerViewModel.swift index 2fcadda69..ebfd06220 100644 --- a/RiotSwiftUI/Modules/LocationSharing/LiveLocationSharingViewer/LiveLocationSharingViewerViewModel.swift +++ b/RiotSwiftUI/Modules/LocationSharing/LiveLocationSharingViewer/LiveLocationSharingViewerViewModel.swift @@ -18,7 +18,7 @@ import Combine import Mapbox import SwiftUI -typealias LiveLocationSharingViewerViewModelType = StateStoreViewModel +typealias LiveLocationSharingViewerViewModelType = StateStoreViewModel class LiveLocationSharingViewerViewModel: LiveLocationSharingViewerViewModelType, LiveLocationSharingViewerViewModelProtocol { // MARK: - Properties diff --git a/RiotSwiftUI/Modules/LocationSharing/StartLocationSharing/LocationSharingViewModel.swift b/RiotSwiftUI/Modules/LocationSharing/StartLocationSharing/LocationSharingViewModel.swift index feeaefe11..39dbea5c8 100644 --- a/RiotSwiftUI/Modules/LocationSharing/StartLocationSharing/LocationSharingViewModel.swift +++ b/RiotSwiftUI/Modules/LocationSharing/StartLocationSharing/LocationSharingViewModel.swift @@ -18,7 +18,7 @@ import Combine import CoreLocation import SwiftUI -typealias LocationSharingViewModelType = StateStoreViewModel +typealias LocationSharingViewModelType = StateStoreViewModel class LocationSharingViewModel: LocationSharingViewModelType, LocationSharingViewModelProtocol { // MARK: - Properties diff --git a/RiotSwiftUI/Modules/LocationSharing/StaticLocationSharingViewer/StaticLocationViewingViewModel.swift b/RiotSwiftUI/Modules/LocationSharing/StaticLocationSharingViewer/StaticLocationViewingViewModel.swift index c1719c8c2..83bdb0110 100644 --- a/RiotSwiftUI/Modules/LocationSharing/StaticLocationSharingViewer/StaticLocationViewingViewModel.swift +++ b/RiotSwiftUI/Modules/LocationSharing/StaticLocationSharingViewer/StaticLocationViewingViewModel.swift @@ -17,7 +17,7 @@ import CoreLocation import SwiftUI -typealias StaticLocationViewingViewModelType = StateStoreViewModel +typealias StaticLocationViewingViewModelType = StateStoreViewModel class StaticLocationViewingViewModel: StaticLocationViewingViewModelType, StaticLocationViewingViewModelProtocol { // MARK: - Properties diff --git a/RiotSwiftUI/Modules/Onboarding/Avatar/OnboardingAvatarViewModel.swift b/RiotSwiftUI/Modules/Onboarding/Avatar/OnboardingAvatarViewModel.swift index d2fadafc7..21d02db5c 100644 --- a/RiotSwiftUI/Modules/Onboarding/Avatar/OnboardingAvatarViewModel.swift +++ b/RiotSwiftUI/Modules/Onboarding/Avatar/OnboardingAvatarViewModel.swift @@ -17,7 +17,7 @@ import Combine import SwiftUI -typealias OnboardingAvatarViewModelType = StateStoreViewModel +typealias OnboardingAvatarViewModelType = StateStoreViewModel class OnboardingAvatarViewModel: OnboardingAvatarViewModelType, OnboardingAvatarViewModelProtocol { // MARK: - Properties diff --git a/RiotSwiftUI/Modules/Onboarding/Celebration/OnboardingCelebrationViewModel.swift b/RiotSwiftUI/Modules/Onboarding/Celebration/OnboardingCelebrationViewModel.swift index ac120cd63..6bfaaf7ac 100644 --- a/RiotSwiftUI/Modules/Onboarding/Celebration/OnboardingCelebrationViewModel.swift +++ b/RiotSwiftUI/Modules/Onboarding/Celebration/OnboardingCelebrationViewModel.swift @@ -16,7 +16,7 @@ import SwiftUI -typealias OnboardingCelebrationViewModelType = StateStoreViewModel +typealias OnboardingCelebrationViewModelType = StateStoreViewModel class OnboardingCelebrationViewModel: OnboardingCelebrationViewModelType, OnboardingCelebrationViewModelProtocol { // MARK: - Properties diff --git a/RiotSwiftUI/Modules/Onboarding/Congratulations/OnboardingCongratulationsViewModel.swift b/RiotSwiftUI/Modules/Onboarding/Congratulations/OnboardingCongratulationsViewModel.swift index 1ea53a4cb..448cde79b 100644 --- a/RiotSwiftUI/Modules/Onboarding/Congratulations/OnboardingCongratulationsViewModel.swift +++ b/RiotSwiftUI/Modules/Onboarding/Congratulations/OnboardingCongratulationsViewModel.swift @@ -16,7 +16,7 @@ import SwiftUI -typealias OnboardingCongratulationsViewModelType = StateStoreViewModel +typealias OnboardingCongratulationsViewModelType = StateStoreViewModel class OnboardingCongratulationsViewModel: OnboardingCongratulationsViewModelType, OnboardingCongratulationsViewModelProtocol { // MARK: - Properties diff --git a/RiotSwiftUI/Modules/Onboarding/DisplayName/OnboardingDisplayNameViewModel.swift b/RiotSwiftUI/Modules/Onboarding/DisplayName/OnboardingDisplayNameViewModel.swift index 765d4c4e8..6fb6e38a7 100644 --- a/RiotSwiftUI/Modules/Onboarding/DisplayName/OnboardingDisplayNameViewModel.swift +++ b/RiotSwiftUI/Modules/Onboarding/DisplayName/OnboardingDisplayNameViewModel.swift @@ -17,7 +17,7 @@ import Combine import SwiftUI -typealias OnboardingDisplayNameViewModelType = StateStoreViewModel +typealias OnboardingDisplayNameViewModelType = StateStoreViewModel class OnboardingDisplayNameViewModel: OnboardingDisplayNameViewModelType, OnboardingDisplayNameViewModelProtocol { // MARK: - Properties diff --git a/RiotSwiftUI/Modules/Onboarding/SplashScreen/OnboardingSplashScreenViewModel.swift b/RiotSwiftUI/Modules/Onboarding/SplashScreen/OnboardingSplashScreenViewModel.swift index 95650f38f..0d9c9c563 100644 --- a/RiotSwiftUI/Modules/Onboarding/SplashScreen/OnboardingSplashScreenViewModel.swift +++ b/RiotSwiftUI/Modules/Onboarding/SplashScreen/OnboardingSplashScreenViewModel.swift @@ -17,7 +17,7 @@ import Combine import SwiftUI -typealias OnboardingSplashScreenViewModelType = StateStoreViewModel +typealias OnboardingSplashScreenViewModelType = StateStoreViewModel protocol OnboardingSplashScreenViewModelProtocol { var completion: ((OnboardingSplashScreenViewModelResult) -> Void)? { get set } diff --git a/RiotSwiftUI/Modules/Onboarding/UseCase/OnboardingUseCaseModels.swift b/RiotSwiftUI/Modules/Onboarding/UseCase/OnboardingUseCaseModels.swift index 8ee4f408b..796ba8e72 100644 --- a/RiotSwiftUI/Modules/Onboarding/UseCase/OnboardingUseCaseModels.swift +++ b/RiotSwiftUI/Modules/Onboarding/UseCase/OnboardingUseCaseModels.swift @@ -20,10 +20,6 @@ import Foundation // MARK: View model -enum OnboardingUseCaseStateAction { - case viewAction(OnboardingUseCaseViewAction) -} - enum OnboardingUseCaseViewModelResult { case personalMessaging case workMessaging diff --git a/RiotSwiftUI/Modules/Onboarding/UseCase/OnboardingUseCaseViewModel.swift b/RiotSwiftUI/Modules/Onboarding/UseCase/OnboardingUseCaseViewModel.swift index d3d61906d..b7eb7eb2a 100644 --- a/RiotSwiftUI/Modules/Onboarding/UseCase/OnboardingUseCaseViewModel.swift +++ b/RiotSwiftUI/Modules/Onboarding/UseCase/OnboardingUseCaseViewModel.swift @@ -16,7 +16,7 @@ import SwiftUI -typealias OnboardingUseCaseViewModelType = StateStoreViewModel +typealias OnboardingUseCaseViewModelType = StateStoreViewModel class OnboardingUseCaseViewModel: OnboardingUseCaseViewModelType, OnboardingUseCaseViewModelProtocol { // MARK: - Properties @@ -41,8 +41,4 @@ class OnboardingUseCaseViewModel: OnboardingUseCaseViewModelType, OnboardingUseC completion?(result) } } - - override class func reducer(state: inout OnboardingUseCaseViewState, action: OnboardingUseCaseStateAction) { - // There is no mutable state to reduce :) - } } diff --git a/RiotSwiftUI/Modules/Room/AllChatsOnboarding/AllChatsOnboardingViewModel.swift b/RiotSwiftUI/Modules/Room/AllChatsOnboarding/AllChatsOnboardingViewModel.swift index a91fa8d9d..0ba19872a 100644 --- a/RiotSwiftUI/Modules/Room/AllChatsOnboarding/AllChatsOnboardingViewModel.swift +++ b/RiotSwiftUI/Modules/Room/AllChatsOnboarding/AllChatsOnboardingViewModel.swift @@ -17,7 +17,7 @@ import Combine import SwiftUI -typealias AllChatsOnboardingViewModelType = StateStoreViewModel +typealias AllChatsOnboardingViewModelType = StateStoreViewModel class AllChatsOnboardingViewModel: AllChatsOnboardingViewModelType, AllChatsOnboardingViewModelProtocol { // MARK: - Properties diff --git a/RiotSwiftUI/Modules/Room/PollEditForm/PollEditFormViewModel.swift b/RiotSwiftUI/Modules/Room/PollEditForm/PollEditFormViewModel.swift index 7e48488a6..43ce0dc72 100644 --- a/RiotSwiftUI/Modules/Room/PollEditForm/PollEditFormViewModel.swift +++ b/RiotSwiftUI/Modules/Room/PollEditForm/PollEditFormViewModel.swift @@ -22,7 +22,7 @@ struct PollEditFormViewModelParameters { let pollDetails: EditFormPollDetails } -typealias PollEditFormViewModelType = StateStoreViewModel +typealias PollEditFormViewModelType = StateStoreViewModel class PollEditFormViewModel: PollEditFormViewModelType, PollEditFormViewModelProtocol { private enum Constants { diff --git a/RiotSwiftUI/Modules/Room/RoomAccess/RoomAccessTypeChooser/RoomAccessTypeChooserModels.swift b/RiotSwiftUI/Modules/Room/RoomAccess/RoomAccessTypeChooser/RoomAccessTypeChooserModels.swift index 4ebad9737..0268cc754 100644 --- a/RiotSwiftUI/Modules/Room/RoomAccess/RoomAccessTypeChooser/RoomAccessTypeChooserModels.swift +++ b/RiotSwiftUI/Modules/Room/RoomAccess/RoomAccessTypeChooser/RoomAccessTypeChooserModels.swift @@ -42,13 +42,6 @@ enum RoomAccessTypeChooserCoordinatorAction { // MARK: - View model -/// Actions to be performed on the `ViewModel` State -enum RoomAccessTypeChooserStateAction { - case updateAccessItems([RoomAccessTypeChooserAccessItem]) - case updateShowUpgradeRoomAlert(Bool) - case updateWaitingMessage(String?) -} - /// Actions sent by the`ViewModel` to the `Coordinator`. enum RoomAccessTypeChooserViewModelAction { case spaceSelection(String, RoomAccessTypeChooserAccessType) diff --git a/RiotSwiftUI/Modules/Room/RoomAccess/RoomAccessTypeChooser/RoomAccessTypeChooserViewModel.swift b/RiotSwiftUI/Modules/Room/RoomAccess/RoomAccessTypeChooser/RoomAccessTypeChooserViewModel.swift index d05b9c7d6..2bd0d483c 100644 --- a/RiotSwiftUI/Modules/Room/RoomAccess/RoomAccessTypeChooser/RoomAccessTypeChooserViewModel.swift +++ b/RiotSwiftUI/Modules/Room/RoomAccess/RoomAccessTypeChooser/RoomAccessTypeChooserViewModel.swift @@ -17,7 +17,7 @@ import Combine import SwiftUI -typealias RoomAccessTypeChooserViewModelType = StateStoreViewModel +typealias RoomAccessTypeChooserViewModelType = StateStoreViewModel class RoomAccessTypeChooserViewModel: RoomAccessTypeChooserViewModelType, RoomAccessTypeChooserViewModelProtocol { // MARK: - Properties @@ -47,10 +47,13 @@ class RoomAccessTypeChooserViewModel: RoomAccessTypeChooserViewModelType, RoomAc } private func startObservingService() { - let accessTypePublisher = roomAccessTypeChooserService.accessItemsSubject - .map(RoomAccessTypeChooserStateAction.updateAccessItems) - .eraseToAnyPublisher() - dispatch(actionPublisher: accessTypePublisher) + roomAccessTypeChooserService + .accessItemsSubject + .sink(receiveValue: { [weak self] accessItems in + self?.state.accessItems = accessItems + }) + .store(in: &cancellables) + roomAccessTypeChooserService .roomUpgradeRequiredSubject .sink { [weak self] isUpgradeRequired in @@ -59,10 +62,13 @@ class RoomAccessTypeChooserViewModel: RoomAccessTypeChooserViewModelType, RoomAc } } .store(in: &cancellables) - let waitingMessagePublisher = roomAccessTypeChooserService.waitingMessageSubject - .map(RoomAccessTypeChooserStateAction.updateWaitingMessage) - .eraseToAnyPublisher() - dispatch(actionPublisher: waitingMessagePublisher) + + roomAccessTypeChooserService.waitingMessageSubject + .sink(receiveValue: { [weak self] message in + self?.state.bindings.waitingMessage = message + self?.state.bindings.isLoading = message != nil + }) + .store(in: &cancellables) } // MARK: - Public @@ -77,19 +83,7 @@ class RoomAccessTypeChooserViewModel: RoomAccessTypeChooserViewModelType, RoomAc cancel() } } - - override class func reducer(state: inout RoomAccessTypeChooserViewState, action: RoomAccessTypeChooserStateAction) { - switch action { - case .updateAccessItems(let accessItems): - state.accessItems = accessItems - case .updateShowUpgradeRoomAlert(let show): - state.bindings.showUpgradeRoomAlert = show - case .updateWaitingMessage(let message): - state.bindings.waitingMessage = message - state.bindings.isLoading = message != nil - } - } - + func handleRoomUpgradeResult(_ result: RoomUpgradeCoordinatorResult) { switch result { case .cancel(let roomId): diff --git a/RiotSwiftUI/Modules/Room/RoomUpgrade/RoomUpgradeViewModel.swift b/RiotSwiftUI/Modules/Room/RoomUpgrade/RoomUpgradeViewModel.swift index 60f9485a4..ea3097399 100644 --- a/RiotSwiftUI/Modules/Room/RoomUpgrade/RoomUpgradeViewModel.swift +++ b/RiotSwiftUI/Modules/Room/RoomUpgrade/RoomUpgradeViewModel.swift @@ -17,7 +17,7 @@ import Combine import SwiftUI -typealias RoomUpgradeViewModelType = StateStoreViewModel +typealias RoomUpgradeViewModelType = StateStoreViewModel class RoomUpgradeViewModel: RoomUpgradeViewModelType, RoomUpgradeViewModelProtocol { // MARK: - Properties diff --git a/RiotSwiftUI/Modules/Room/TimelinePoll/TimelinePollViewModel.swift b/RiotSwiftUI/Modules/Room/TimelinePoll/TimelinePollViewModel.swift index 84d1016af..a86862cf4 100644 --- a/RiotSwiftUI/Modules/Room/TimelinePoll/TimelinePollViewModel.swift +++ b/RiotSwiftUI/Modules/Room/TimelinePoll/TimelinePollViewModel.swift @@ -17,7 +17,7 @@ import Combine import SwiftUI -typealias TimelinePollViewModelType = StateStoreViewModel +typealias TimelinePollViewModelType = StateStoreViewModel class TimelinePollViewModel: TimelinePollViewModelType, TimelinePollViewModelProtocol { // MARK: - Properties diff --git a/RiotSwiftUI/Modules/Room/UserSuggestion/UserSuggestionViewModel.swift b/RiotSwiftUI/Modules/Room/UserSuggestion/UserSuggestionViewModel.swift index 4eafdc054..1e1f490fc 100644 --- a/RiotSwiftUI/Modules/Room/UserSuggestion/UserSuggestionViewModel.swift +++ b/RiotSwiftUI/Modules/Room/UserSuggestion/UserSuggestionViewModel.swift @@ -17,7 +17,7 @@ import Combine import SwiftUI -typealias UserSuggestionViewModelType = StateStoreViewModel +typealias UserSuggestionViewModelType = StateStoreViewModel class UserSuggestionViewModel: UserSuggestionViewModelType, UserSuggestionViewModelProtocol { // MARK: - Properties diff --git a/RiotSwiftUI/Modules/Settings/ChangePassword/ChangePasswordViewModel.swift b/RiotSwiftUI/Modules/Settings/ChangePassword/ChangePasswordViewModel.swift index 4cfc43d67..6cfcea0e6 100644 --- a/RiotSwiftUI/Modules/Settings/ChangePassword/ChangePasswordViewModel.swift +++ b/RiotSwiftUI/Modules/Settings/ChangePassword/ChangePasswordViewModel.swift @@ -16,7 +16,7 @@ import SwiftUI -typealias ChangePasswordViewModelType = StateStoreViewModel +typealias ChangePasswordViewModelType = StateStoreViewModel class ChangePasswordViewModel: ChangePasswordViewModelType, ChangePasswordViewModelProtocol { // MARK: - Properties diff --git a/RiotSwiftUI/Modules/Spaces/MatrixItemChooser/MatrixItemChooserViewModel.swift b/RiotSwiftUI/Modules/Spaces/MatrixItemChooser/MatrixItemChooserViewModel.swift index bc1995750..8ef52c045 100644 --- a/RiotSwiftUI/Modules/Spaces/MatrixItemChooser/MatrixItemChooserViewModel.swift +++ b/RiotSwiftUI/Modules/Spaces/MatrixItemChooser/MatrixItemChooserViewModel.swift @@ -17,7 +17,7 @@ import Combine import SwiftUI -typealias MatrixItemChooserViewModelType = StateStoreViewModel +typealias MatrixItemChooserViewModelType = StateStoreViewModel class MatrixItemChooserViewModel: MatrixItemChooserViewModelType, MatrixItemChooserViewModelProtocol { // MARK: - Properties diff --git a/RiotSwiftUI/Modules/Spaces/SpaceCreation/SpaceCreationEmailInvites/Model/SpaceCreationEmailInvitesStateAction.swift b/RiotSwiftUI/Modules/Spaces/SpaceCreation/SpaceCreationEmailInvites/Model/SpaceCreationEmailInvitesStateAction.swift deleted file mode 100644 index b266fbfb7..000000000 --- a/RiotSwiftUI/Modules/Spaces/SpaceCreation/SpaceCreationEmailInvites/Model/SpaceCreationEmailInvitesStateAction.swift +++ /dev/null @@ -1,24 +0,0 @@ -// File created from SimpleUserProfileExample -// $ createScreen.sh Spaces/SpaceCreation/SpaceCreationEmailInvites SpaceCreationEmailInvites -// -// Copyright 2021 New Vector Ltd -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import Foundation - -enum SpaceCreationEmailInvitesStateAction { - case updateEmailValidity(_ validity: [Bool]) - case updateLoading(_ loading: Bool) -} diff --git a/RiotSwiftUI/Modules/Spaces/SpaceCreation/SpaceCreationEmailInvites/ViewModel/SpaceCreationEmailInvitesViewModel.swift b/RiotSwiftUI/Modules/Spaces/SpaceCreation/SpaceCreationEmailInvites/ViewModel/SpaceCreationEmailInvitesViewModel.swift index 0787198b9..92c906378 100644 --- a/RiotSwiftUI/Modules/Spaces/SpaceCreation/SpaceCreationEmailInvites/ViewModel/SpaceCreationEmailInvitesViewModel.swift +++ b/RiotSwiftUI/Modules/Spaces/SpaceCreation/SpaceCreationEmailInvites/ViewModel/SpaceCreationEmailInvitesViewModel.swift @@ -19,7 +19,7 @@ import Combine import SwiftUI -typealias SpaceCreationEmailInvitesViewModelType = StateStoreViewModel +typealias SpaceCreationEmailInvitesViewModelType = StateStoreViewModel class SpaceCreationEmailInvitesViewModel: SpaceCreationEmailInvitesViewModelType, SpaceCreationEmailInvitesViewModelProtocol { // MARK: - Properties @@ -40,12 +40,14 @@ class SpaceCreationEmailInvitesViewModel: SpaceCreationEmailInvitesViewModelType self.service = service super.init(initialViewState: SpaceCreationEmailInvitesViewModel.defaultState(creationParameters: creationParameters, service: service)) } - + private func setupServiceObserving() { - let publisher = service.isLoadingSubject - .map(SpaceCreationEmailInvitesStateAction.updateLoading) - .eraseToAnyPublisher() - dispatch(actionPublisher: publisher) + service + .isLoadingSubject + .sink(receiveValue: { [weak self] isLoading in + self?.state.loading = isLoading + }) + .store(in: &cancellables) } private static func defaultState(creationParameters: SpaceCreationParameters, service: SpaceCreationEmailInvitesServiceProtocol) -> SpaceCreationEmailInvitesViewState { @@ -74,21 +76,13 @@ class SpaceCreationEmailInvitesViewModel: SpaceCreationEmailInvitesViewModelType } } - override class func reducer(state: inout SpaceCreationEmailInvitesViewState, action: SpaceCreationEmailInvitesStateAction) { - switch action { - case .updateEmailValidity(let emailValidity): - state.emailAddressesValid = emailValidity - case .updateLoading(let isLoading): - state.loading = isLoading - } - } - private func done() { creationParameters.emailInvites = context.emailInvites creationParameters.inviteType = .email - let emailAddressesValidity = service.validate(context.emailInvites) - dispatch(action: .updateEmailValidity(emailAddressesValidity)) + let emailAddressesValidity = service.validate(context.emailInvites) + state.emailAddressesValid = emailAddressesValidity + if context.emailInvites.reduce(true, { $0 && $1.isEmpty }) { completion?(.done) } else if emailAddressesValidity.reduce(true, { $0 && $1 }) { diff --git a/RiotSwiftUI/Modules/Spaces/SpaceCreation/SpaceCreationMenu/Model/SpaceCreationMenuStateAction.swift b/RiotSwiftUI/Modules/Spaces/SpaceCreation/SpaceCreationMenu/Model/SpaceCreationMenuStateAction.swift deleted file mode 100644 index 15c7a4ffc..000000000 --- a/RiotSwiftUI/Modules/Spaces/SpaceCreation/SpaceCreationMenu/Model/SpaceCreationMenuStateAction.swift +++ /dev/null @@ -1,22 +0,0 @@ -// File created from TemplateAdvancedRoomsExample -// $ createSwiftUITwoScreen.sh Spaces/SpaceCreation SpaceCreation SpaceCreationMenu SpaceCreationSettings -// -// Copyright 2021 New Vector Ltd -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import Foundation - -/// Actions to be performed on the `ViewModel` State -enum SpaceCreationMenuStateAction { } diff --git a/RiotSwiftUI/Modules/Spaces/SpaceCreation/SpaceCreationMenu/ViewModel/SpaceCreationMenuViewModel.swift b/RiotSwiftUI/Modules/Spaces/SpaceCreation/SpaceCreationMenu/ViewModel/SpaceCreationMenuViewModel.swift index 8364178e9..b1bd7e395 100644 --- a/RiotSwiftUI/Modules/Spaces/SpaceCreation/SpaceCreationMenu/ViewModel/SpaceCreationMenuViewModel.swift +++ b/RiotSwiftUI/Modules/Spaces/SpaceCreation/SpaceCreationMenu/ViewModel/SpaceCreationMenuViewModel.swift @@ -19,7 +19,7 @@ import Combine import SwiftUI -typealias SpaceCreationMenuViewModelType = StateStoreViewModel +typealias SpaceCreationMenuViewModelType = StateStoreViewModel class SpaceCreationMenuViewModel: SpaceCreationMenuViewModelType, SpaceCreationMenuViewModelProtocol { // MARK: - Properties diff --git a/RiotSwiftUI/Modules/Spaces/SpaceCreation/SpaceCreationPostProcess/ViewModel/SpaceCreationPostProcessViewModel.swift b/RiotSwiftUI/Modules/Spaces/SpaceCreation/SpaceCreationPostProcess/ViewModel/SpaceCreationPostProcessViewModel.swift index 3892963e9..c90e1926b 100644 --- a/RiotSwiftUI/Modules/Spaces/SpaceCreation/SpaceCreationPostProcess/ViewModel/SpaceCreationPostProcessViewModel.swift +++ b/RiotSwiftUI/Modules/Spaces/SpaceCreation/SpaceCreationPostProcess/ViewModel/SpaceCreationPostProcessViewModel.swift @@ -19,7 +19,7 @@ import Combine import SwiftUI -typealias SpaceCreationPostProcessViewModelType = StateStoreViewModel +typealias SpaceCreationPostProcessViewModelType = StateStoreViewModel class SpaceCreationPostProcessViewModel: SpaceCreationPostProcessViewModelType, SpaceCreationPostProcessViewModelProtocol { // MARK: - Properties @@ -57,10 +57,21 @@ class SpaceCreationPostProcessViewModel: SpaceCreationPostProcessViewModelType, } private func setupTasksObserving() { - let tasksUpdatePublisher = spaceCreationPostProcessService.tasksSubject - .map(SpaceCreationPostProcessStateAction.updateTasks) - .eraseToAnyPublisher() - dispatch(actionPublisher: tasksUpdatePublisher) + spaceCreationPostProcessService + .tasksSubject + .sink(receiveValue: { [weak self] tasks in + guard let self = self else { return } + + self.state.tasks = tasks + self.state.isFinished = tasks.first?.state == .failure || tasks.reduce(true) { result, task in result && task.isFinished } + self.state.errorCount = tasks.reduce(0) { result, task in result + (task.state == .failure ? 1 : 0) } + + NotificationCenter.default.post(name: SpaceCreationPostProcessViewModel.didUpdate, + object: nil, + userInfo: [SpaceCreationPostProcessViewModel.newStateKey: self.state]) + }) + .store(in: &cancellables) + updateNotificationObserver = NotificationCenter.default.addObserver(forName: SpaceCreationPostProcessViewModel.didUpdate, object: nil, queue: OperationQueue.main) { [weak self] notification in guard let self = self else { return @@ -100,19 +111,6 @@ class SpaceCreationPostProcessViewModel: SpaceCreationPostProcessViewModelType, } } - override class func reducer(state: inout SpaceCreationPostProcessViewState, action: SpaceCreationPostProcessStateAction) { - switch action { - case .updateTasks(let tasks): - state.tasks = tasks - state.isFinished = tasks.first?.state == .failure || tasks.reduce(true) { result, task in result && task.isFinished } - state.errorCount = tasks.reduce(0) { result, task in result + (task.state == .failure ? 1 : 0) } - } - - NotificationCenter.default.post(name: SpaceCreationPostProcessViewModel.didUpdate, object: nil, userInfo: [SpaceCreationPostProcessViewModel.newStateKey: state]) - - UILog.debug("[SpaceCreationPostProcessViewModel] reducer with action \(action) produced state: \(state)") - } - private func done(spaceId: String) { completion?(.done(spaceId)) } diff --git a/RiotSwiftUI/Modules/Spaces/SpaceCreation/SpaceCreationRooms/Model/SpaceCreationRoomsStateAction.swift b/RiotSwiftUI/Modules/Spaces/SpaceCreation/SpaceCreationRooms/Model/SpaceCreationRoomsStateAction.swift deleted file mode 100644 index 8cfcd7660..000000000 --- a/RiotSwiftUI/Modules/Spaces/SpaceCreation/SpaceCreationRooms/Model/SpaceCreationRoomsStateAction.swift +++ /dev/null @@ -1,21 +0,0 @@ -// File created from SimpleUserProfileExample -// $ createScreen.sh Spaces/SpaceCreation/SpaceCreationRooms SpaceCreationRooms -// -// Copyright 2021 New Vector Ltd -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import Foundation - -enum SpaceCreationRoomsStateAction { } diff --git a/RiotSwiftUI/Modules/Spaces/SpaceCreation/SpaceCreationRooms/ViewModel/SpaceCreationRoomsViewModel.swift b/RiotSwiftUI/Modules/Spaces/SpaceCreation/SpaceCreationRooms/ViewModel/SpaceCreationRoomsViewModel.swift index d20103994..d673cd2b2 100644 --- a/RiotSwiftUI/Modules/Spaces/SpaceCreation/SpaceCreationRooms/ViewModel/SpaceCreationRoomsViewModel.swift +++ b/RiotSwiftUI/Modules/Spaces/SpaceCreation/SpaceCreationRooms/ViewModel/SpaceCreationRoomsViewModel.swift @@ -19,7 +19,7 @@ import Combine import SwiftUI -typealias SpaceCreationRoomsViewModelType = StateStoreViewModel +typealias SpaceCreationRoomsViewModelType = StateStoreViewModel class SpaceCreationRoomsViewModel: SpaceCreationRoomsViewModelType, SpaceCreationRoomsViewModelProtocol { // MARK: - Setup @@ -59,8 +59,6 @@ class SpaceCreationRoomsViewModel: SpaceCreationRoomsViewModelType, SpaceCreatio done() } } - - override class func reducer(state: inout SpaceCreationRoomsViewState, action: SpaceCreationRoomsStateAction) { } // MARK: - Private diff --git a/RiotSwiftUI/Modules/Spaces/SpaceCreation/SpaceCreationSettings/Model/SpaceCreationSettingsStateAction.swift b/RiotSwiftUI/Modules/Spaces/SpaceCreation/SpaceCreationSettings/Model/SpaceCreationSettingsStateAction.swift deleted file mode 100644 index 33fa8b36c..000000000 --- a/RiotSwiftUI/Modules/Spaces/SpaceCreation/SpaceCreationSettings/Model/SpaceCreationSettingsStateAction.swift +++ /dev/null @@ -1,29 +0,0 @@ -// File created from TemplateAdvancedRoomsExample -// $ createSwiftUITwoScreen.sh Spaces/SpaceCreation SpaceCreation SpaceCreationMenu SpaceCreationSettings -// -// Copyright 2021 New Vector Ltd -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -// - -import Foundation -import UIKit - -/// Actions to be performed on the `ViewModel` State -enum SpaceCreationSettingsStateAction { - case updateRoomNameError(String?) - case updateRoomDefaultAddress(String) - case updateAddressValidationStatus(SpaceCreationSettingsAddressValidationStatus) - case updateAvatar(AvatarInputProtocol) - case updateAvatarImage(UIImage?) -} diff --git a/RiotSwiftUI/Modules/Spaces/SpaceCreation/SpaceCreationSettings/ViewModel/SpaceCreationSettingsViewModel.swift b/RiotSwiftUI/Modules/Spaces/SpaceCreation/SpaceCreationSettings/ViewModel/SpaceCreationSettingsViewModel.swift index beefa9188..6f5661a8d 100644 --- a/RiotSwiftUI/Modules/Spaces/SpaceCreation/SpaceCreationSettings/ViewModel/SpaceCreationSettingsViewModel.swift +++ b/RiotSwiftUI/Modules/Spaces/SpaceCreation/SpaceCreationSettings/ViewModel/SpaceCreationSettingsViewModel.swift @@ -19,7 +19,7 @@ import Combine import SwiftUI -typealias SpaceCreationSettingsViewModelType = StateStoreViewModel +typealias SpaceCreationSettingsViewModelType = StateStoreViewModel class SpaceCreationSettingsViewModel: SpaceCreationSettingsViewModelType, SpaceCreationSettingsViewModelProtocol { // MARK: - Properties @@ -44,20 +44,27 @@ class SpaceCreationSettingsViewModel: SpaceCreationSettingsViewModelType, SpaceC } private func setupServiceObserving() { - let defaultAddressUpdatePublisher = spaceCreationSettingsService.defaultAddressSubject - .map(SpaceCreationSettingsStateAction.updateRoomDefaultAddress) - .eraseToAnyPublisher() - dispatch(actionPublisher: defaultAddressUpdatePublisher) + spaceCreationSettingsService + .defaultAddressSubject + .sink(receiveValue: { [weak self] address in + self?.state.defaultAddress = address + }) + .store(in: &cancellables) - let addressValidationUpdatePublisher = spaceCreationSettingsService.addressValidationSubject - .map(SpaceCreationSettingsStateAction.updateAddressValidationStatus) - .eraseToAnyPublisher() - dispatch(actionPublisher: addressValidationUpdatePublisher) + spaceCreationSettingsService + .addressValidationSubject + .sink(receiveValue: { [weak self] status in + self?.state.addressMessage = status.message + self?.state.isAddressValid = status.isValid + }) + .store(in: &cancellables) - let avatarUpdatePublisher = spaceCreationSettingsService.avatarViewDataSubject - .map(SpaceCreationSettingsStateAction.updateAvatar) - .eraseToAnyPublisher() - dispatch(actionPublisher: avatarUpdatePublisher) + spaceCreationSettingsService + .avatarViewDataSubject + .sink(receiveValue: { [weak self] avatar in + self?.state.avatar = avatar + }) + .store(in: &cancellables) } private static func defaultState(creationParameters: SpaceCreationParameters, validationStatus: SpaceCreationSettingsAddressValidationStatus) -> SpaceCreationSettingsViewState { @@ -84,7 +91,7 @@ class SpaceCreationSettingsViewModel: SpaceCreationSettingsViewModelType, SpaceC func updateAvatarImage(with image: UIImage?) { creationParameters.userSelectedAvatar = image - dispatch(action: .updateAvatarImage(image)) + state.avatarImage = image } override func process(viewAction: SpaceCreationSettingsViewAction) { @@ -101,7 +108,7 @@ class SpaceCreationSettingsViewModel: SpaceCreationSettingsViewModelType, SpaceC spaceCreationSettingsService.roomName = newValue creationParameters.address = spaceCreationSettingsService.defaultAddressSubject.value creationParameters.name = newValue - dispatch(action: .updateRoomNameError(newValue.isEmpty ? VectorL10n.spacesCreationEmptyRoomNameError : nil)) + state.roomNameError = newValue.isEmpty ? VectorL10n.spacesCreationEmptyRoomNameError : nil case .addressChanged(let newValue): spaceCreationSettingsService.userDefinedAddress = newValue creationParameters.userDefinedAddress = newValue @@ -109,28 +116,12 @@ class SpaceCreationSettingsViewModel: SpaceCreationSettingsViewModelType, SpaceC creationParameters.topic = newValue } } - - override class func reducer(state: inout SpaceCreationSettingsViewState, action: SpaceCreationSettingsStateAction) { - switch action { - case .updateRoomNameError(let error): - state.roomNameError = error - case .updateRoomDefaultAddress(let defaultAddress): - state.defaultAddress = defaultAddress - case .updateAddressValidationStatus(let validationStatus): - state.addressMessage = validationStatus.message - state.isAddressValid = validationStatus.isValid - case .updateAvatar(let avatar): - state.avatar = avatar - case .updateAvatarImage(let image): - state.avatarImage = image - } - } - + // MARK: - Private private func done() { guard !context.roomName.isEmpty else { - dispatch(action: .updateRoomNameError(VectorL10n.spacesCreationEmptyRoomNameError)) + state.roomNameError = VectorL10n.spacesCreationEmptyRoomNameError return } @@ -143,7 +134,7 @@ class SpaceCreationSettingsViewModel: SpaceCreationSettingsViewModelType, SpaceC creationParameters.userDefinedAddress = context.address creationParameters.address = spaceCreationSettingsService.defaultAddressSubject.value - dispatch(action: .updateRoomNameError(nil)) + state.roomNameError = nil callback?(.done) } diff --git a/RiotSwiftUI/Modules/Spaces/SpaceSelectorBottomSheet/SpaceSelector/SpaceSelectorViewModel.swift b/RiotSwiftUI/Modules/Spaces/SpaceSelectorBottomSheet/SpaceSelector/SpaceSelectorViewModel.swift index 477eac8d2..562b4e76a 100644 --- a/RiotSwiftUI/Modules/Spaces/SpaceSelectorBottomSheet/SpaceSelector/SpaceSelectorViewModel.swift +++ b/RiotSwiftUI/Modules/Spaces/SpaceSelectorBottomSheet/SpaceSelector/SpaceSelectorViewModel.swift @@ -17,7 +17,7 @@ import Combine import SwiftUI -typealias SpaceSelectorViewModelType = StateStoreViewModel +typealias SpaceSelectorViewModelType = StateStoreViewModel class SpaceSelectorViewModel: SpaceSelectorViewModelType, SpaceSelectorViewModelProtocol { // MARK: - Properties diff --git a/RiotSwiftUI/Modules/Spaces/SpaceSettings/SpaceSettings/SpaceSettingsViewModel.swift b/RiotSwiftUI/Modules/Spaces/SpaceSettings/SpaceSettings/SpaceSettingsViewModel.swift index fbc853f2b..c1ea68534 100644 --- a/RiotSwiftUI/Modules/Spaces/SpaceSettings/SpaceSettings/SpaceSettingsViewModel.swift +++ b/RiotSwiftUI/Modules/Spaces/SpaceSettings/SpaceSettings/SpaceSettingsViewModel.swift @@ -17,7 +17,7 @@ import Combine import SwiftUI -typealias SpaceSettingsViewModelType = StateStoreViewModel +typealias SpaceSettingsViewModelType = StateStoreViewModel class SpaceSettingsViewModel: SpaceSettingsViewModelType, SpaceSettingsViewModelProtocol { // MARK: - Properties diff --git a/RiotSwiftUI/Modules/Template/SimpleScreenExample/TemplateSimpleScreenViewModel.swift b/RiotSwiftUI/Modules/Template/SimpleScreenExample/TemplateSimpleScreenViewModel.swift index 178c4215f..995faef6c 100644 --- a/RiotSwiftUI/Modules/Template/SimpleScreenExample/TemplateSimpleScreenViewModel.swift +++ b/RiotSwiftUI/Modules/Template/SimpleScreenExample/TemplateSimpleScreenViewModel.swift @@ -16,7 +16,7 @@ import SwiftUI -typealias TemplateSimpleScreenViewModelType = StateStoreViewModel +typealias TemplateSimpleScreenViewModelType = StateStoreViewModel class TemplateSimpleScreenViewModel: TemplateSimpleScreenViewModelType, TemplateSimpleScreenViewModelProtocol { var completion: ((TemplateSimpleScreenViewModelResult) -> Void)? diff --git a/RiotSwiftUI/Modules/Template/SimpleUserProfileExample/TemplateUserProfileViewModel.swift b/RiotSwiftUI/Modules/Template/SimpleUserProfileExample/TemplateUserProfileViewModel.swift index 8ccb953c3..d827aed94 100644 --- a/RiotSwiftUI/Modules/Template/SimpleUserProfileExample/TemplateUserProfileViewModel.swift +++ b/RiotSwiftUI/Modules/Template/SimpleUserProfileExample/TemplateUserProfileViewModel.swift @@ -17,7 +17,7 @@ import Combine import SwiftUI -typealias TemplateUserProfileViewModelType = StateStoreViewModel +typealias TemplateUserProfileViewModelType = StateStoreViewModel class TemplateUserProfileViewModel: TemplateUserProfileViewModelType, TemplateUserProfileViewModelProtocol { private let templateUserProfileService: TemplateUserProfileServiceProtocol diff --git a/RiotSwiftUI/Modules/Template/TemplateAdvancedRoomsExample/TemplateRoomChat/TemplateRoomChatViewModel.swift b/RiotSwiftUI/Modules/Template/TemplateAdvancedRoomsExample/TemplateRoomChat/TemplateRoomChatViewModel.swift index 915fb92fd..91da403b3 100644 --- a/RiotSwiftUI/Modules/Template/TemplateAdvancedRoomsExample/TemplateRoomChat/TemplateRoomChatViewModel.swift +++ b/RiotSwiftUI/Modules/Template/TemplateAdvancedRoomsExample/TemplateRoomChat/TemplateRoomChatViewModel.swift @@ -17,7 +17,7 @@ import Combine import SwiftUI -typealias TemplateRoomChatViewModelType = StateStoreViewModel +typealias TemplateRoomChatViewModelType = StateStoreViewModel class TemplateRoomChatViewModel: TemplateRoomChatViewModelType, TemplateRoomChatViewModelProtocol { enum Constants { diff --git a/RiotSwiftUI/Modules/Template/TemplateAdvancedRoomsExample/TemplateRoomList/TemplateRoomListViewModel.swift b/RiotSwiftUI/Modules/Template/TemplateAdvancedRoomsExample/TemplateRoomList/TemplateRoomListViewModel.swift index 8d6701cea..853abcf51 100644 --- a/RiotSwiftUI/Modules/Template/TemplateAdvancedRoomsExample/TemplateRoomList/TemplateRoomListViewModel.swift +++ b/RiotSwiftUI/Modules/Template/TemplateAdvancedRoomsExample/TemplateRoomList/TemplateRoomListViewModel.swift @@ -17,7 +17,7 @@ import Combine import SwiftUI -typealias TemplateRoomListViewModelType = StateStoreViewModel +typealias TemplateRoomListViewModelType = StateStoreViewModel class TemplateRoomListViewModel: TemplateRoomListViewModelType, TemplateRoomListViewModelProtocol { private let templateRoomListService: TemplateRoomListServiceProtocol diff --git a/RiotSwiftUI/Modules/UserSessions/UserSessionDetails/UserSessionDetailsViewModel.swift b/RiotSwiftUI/Modules/UserSessions/UserSessionDetails/UserSessionDetailsViewModel.swift index fde1dac63..2772c489d 100644 --- a/RiotSwiftUI/Modules/UserSessions/UserSessionDetails/UserSessionDetailsViewModel.swift +++ b/RiotSwiftUI/Modules/UserSessions/UserSessionDetails/UserSessionDetailsViewModel.swift @@ -16,7 +16,7 @@ import Foundation -typealias UserSessionDetailsViewModelType = StateStoreViewModel +typealias UserSessionDetailsViewModelType = StateStoreViewModel class UserSessionDetailsViewModel: UserSessionDetailsViewModelType, UserSessionDetailsViewModelProtocol { var completion: ((UserSessionDetailsViewModelResult) -> Void)? diff --git a/RiotSwiftUI/Modules/UserSessions/UserSessionOverview/UserSessionOverviewViewModel.swift b/RiotSwiftUI/Modules/UserSessions/UserSessionOverview/UserSessionOverviewViewModel.swift index 907ad325f..1b998cad9 100644 --- a/RiotSwiftUI/Modules/UserSessions/UserSessionOverview/UserSessionOverviewViewModel.swift +++ b/RiotSwiftUI/Modules/UserSessions/UserSessionOverview/UserSessionOverviewViewModel.swift @@ -16,7 +16,7 @@ import SwiftUI -typealias UserSessionOverviewViewModelType = StateStoreViewModel +typealias UserSessionOverviewViewModelType = StateStoreViewModel class UserSessionOverviewViewModel: UserSessionOverviewViewModelType, UserSessionOverviewViewModelProtocol { private let userSessionInfo: UserSessionInfo diff --git a/RiotSwiftUI/Modules/UserSessions/UserSessionsOverview/UserSessionsOverviewViewModel.swift b/RiotSwiftUI/Modules/UserSessions/UserSessionsOverview/UserSessionsOverviewViewModel.swift index ee7a82717..47b5e7ad5 100644 --- a/RiotSwiftUI/Modules/UserSessions/UserSessionsOverview/UserSessionsOverviewViewModel.swift +++ b/RiotSwiftUI/Modules/UserSessions/UserSessionsOverview/UserSessionsOverviewViewModel.swift @@ -16,9 +16,7 @@ import SwiftUI -typealias UserSessionsOverviewViewModelType = StateStoreViewModel +typealias UserSessionsOverviewViewModelType = StateStoreViewModel class UserSessionsOverviewViewModel: UserSessionsOverviewViewModelType, UserSessionsOverviewViewModelProtocol { private let userSessionsOverviewService: UserSessionsOverviewServiceProtocol