User session flow coordinator and details view

This commit is contained in:
Aleksandrs Proskurins
2022-09-15 09:46:23 +03:00
parent aa1ff698cf
commit 3acfdbc83d
10 changed files with 439 additions and 6 deletions
@@ -21,6 +21,10 @@ struct UserSessionsOverviewCoordinatorParameters {
let session: MXSession
}
protocol UserSessionsOverviewCoordinatorDelegate: AnyObject {
func showUserSessionOverview(session: UserSessionInfo)
}
final class UserSessionsOverviewCoordinator: Coordinator, Presentable {
// MARK: - Properties
@@ -30,7 +34,8 @@ final class UserSessionsOverviewCoordinator: Coordinator, Presentable {
private let parameters: UserSessionsOverviewCoordinatorParameters
private let userSessionsOverviewHostingController: UIViewController
private var userSessionsOverviewViewModel: UserSessionsOverviewViewModelProtocol
private let service: UserSessionsOverviewService
private var indicatorPresenter: UserIndicatorTypePresenterProtocol
private var loadingIndicator: UserIndicator?
@@ -40,11 +45,15 @@ final class UserSessionsOverviewCoordinator: Coordinator, Presentable {
var childCoordinators: [Coordinator] = []
var completion: (() -> Void)?
weak var delegate: UserSessionsOverviewCoordinatorDelegate?
// MARK: - Setup
init(parameters: UserSessionsOverviewCoordinatorParameters) {
self.parameters = parameters
let viewModel = UserSessionsOverviewViewModel(userSessionsOverviewService: UserSessionsOverviewService(mxSession: parameters.session))
let service = UserSessionsOverviewService(mxSession: parameters.session)
self.service = service
let viewModel = UserSessionsOverviewViewModel(userSessionsOverviewService: service)
let view = UserSessionsOverview(viewModel: viewModel.context)
userSessionsOverviewViewModel = viewModel
@@ -117,7 +126,10 @@ final class UserSessionsOverviewCoordinator: Coordinator, Presentable {
}
private func showUserSessionDetails(sessionId: String) {
// TODO
guard let sessionInfo = service.getOtherSession(sessionId: sessionId) else {
return
}
delegate?.showUserSessionOverview(session: sessionInfo)
}
private func showAllOtherSessions() {
@@ -47,14 +47,18 @@ class UserSessionsOverviewService: UserSessionsOverviewServiceProtocol {
self.mxSession.matrixRestClient.devices { response in
switch response {
case .success(let devices):
let overviewData = self.userSessionsOverviewData(from: devices)
completion(.success(overviewData))
self.lastOverviewData = self.userSessionsOverviewData(from: devices)
completion(.success(self.lastOverviewData))
case .failure(let error):
completion(.failure(error))
}
}
}
func getOtherSession(sessionId: String) -> UserSessionInfo? {
lastOverviewData.otherSessionsInfo.first(where: {$0.sessionId == sessionId})
}
// MARK: - Private
private func setupInitialOverviewData() {
@@ -75,7 +75,7 @@ struct UserSessionsOverview: View {
viewModel.send(viewAction: .viewAppeared)
}
}
private var otherSessionsSection: some View {
SwiftUI.Section {