Inject setting service in UserSessionOverviewViewModel

This commit is contained in:
Alfonso Grillo
2022-11-02 20:17:10 +01:00
parent 2af87e91e2
commit 4f2cf3d6d7
4 changed files with 11 additions and 6 deletions
@@ -46,6 +46,7 @@ final class UserSessionOverviewCoordinator: Coordinator, Presentable {
let service = UserSessionOverviewService(session: parameters.session, sessionInfo: parameters.sessionInfo)
viewModel = UserSessionOverviewViewModel(sessionInfo: parameters.sessionInfo,
service: service,
settingsService: RiotSettings.shared,
sessionsOverviewDataPublisher: parameters.sessionsOverviewDataPublisher)
hostingController = VectorHostingController(rootView: UserSessionOverview(viewModel: viewModel.context))
@@ -121,7 +121,7 @@ enum MockUserSessionOverviewScreenState: MockScreenState, CaseIterable {
service = MockUserSessionOverviewService(pusherEnabled: true, remotelyTogglingPushersAvailable: false)
}
let viewModel = UserSessionOverviewViewModel(sessionInfo: session, service: service)
let viewModel = UserSessionOverviewViewModel(sessionInfo: session, service: service, settingsService: MockUserSessionSettings())
// can simulate service and viewModel actions here if needs be.
return ([viewModel], AnyView(UserSessionOverview(viewModel: viewModel.context)))
}
@@ -42,7 +42,7 @@ struct UserSessionOverviewViewState: BindableState {
var isPusherEnabled: Bool?
var remotelyTogglingPushersAvailable: Bool
var showLoadingIndicator: Bool
var showLocationInfo = RiotSettings.shared.showIPAddressesInSessionsManager
var showLocationInfo: Bool
}
enum UserSessionOverviewViewAction {
@@ -22,13 +22,15 @@ typealias UserSessionOverviewViewModelType = StateStoreViewModel<UserSessionOver
class UserSessionOverviewViewModel: UserSessionOverviewViewModelType, UserSessionOverviewViewModelProtocol {
private let sessionInfo: UserSessionInfo
private let service: UserSessionOverviewServiceProtocol
private let settingService: UserSessionSettingsProtocol
var completion: ((UserSessionOverviewViewModelResult) -> Void)?
// MARK: - Setup
init(sessionInfo: UserSessionInfo,
service: UserSessionOverviewServiceProtocol,
settingsService: UserSessionSettingsProtocol,
sessionsOverviewDataPublisher: CurrentValueSubject<UserSessionsOverviewData, Never> = .init(.init(currentSession: nil,
unverifiedSessions: [],
inactiveSessions: [],
@@ -36,13 +38,15 @@ class UserSessionOverviewViewModel: UserSessionOverviewViewModelType, UserSessio
linkDeviceEnabled: false))) {
self.sessionInfo = sessionInfo
self.service = service
self.settingService = settingsService
let cardViewData = UserSessionCardViewData(sessionInfo: sessionInfo)
let state = UserSessionOverviewViewState(cardViewData: cardViewData,
isCurrentSession: sessionInfo.isCurrent,
isPusherEnabled: service.pusherEnabledSubject.value,
remotelyTogglingPushersAvailable: service.remotelyTogglingPushersAvailableSubject.value,
showLoadingIndicator: false)
showLoadingIndicator: false,
showLocationInfo: settingsService.showIPAddressesInSessionsManager)
super.init(initialViewState: state)
startObservingService()
@@ -96,8 +100,8 @@ class UserSessionOverviewViewModel: UserSessionOverviewViewModelType, UserSessio
case .logoutOfSession:
completion?(.logoutOfSession(sessionInfo))
case .showLocationInfo:
RiotSettings.shared.showIPAddressesInSessionsManager.toggle()
state.showLocationInfo = RiotSettings.shared.showIPAddressesInSessionsManager
settingService.showIPAddressesInSessionsManager.toggle()
state.showLocationInfo = settingService.showIPAddressesInSessionsManager
}
}
}