mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-03 06:55:59 +00:00
Added user display names and switched to using an avatar url directly in the homeScreen viewModel for the current user.
This commit is contained in:
@@ -51,7 +51,9 @@ final class HomeScreenCoordinator: Coordinator, Presentable {
|
||||
self.parameters = parameters
|
||||
|
||||
let userDisplayName = self.parameters.userSession.userDisplayName ?? self.parameters.userSession.userIdentifier
|
||||
viewModel = HomeScreenViewModel(userDisplayName: userDisplayName, mediaProvider: self.parameters.mediaProvider)
|
||||
viewModel = HomeScreenViewModel(userDisplayName: userDisplayName,
|
||||
userAvatarURL: self.parameters.userSession.userAvatarURL,
|
||||
mediaProvider: self.parameters.mediaProvider)
|
||||
|
||||
let view = HomeScreen(context: viewModel.context)
|
||||
hostingController = UIHostingController(rootView: view)
|
||||
@@ -62,15 +64,6 @@ final class HomeScreenCoordinator: Coordinator, Presentable {
|
||||
switch result {
|
||||
case .logout:
|
||||
self.completion?(.logout)
|
||||
case .loadUserAvatar:
|
||||
self.parameters.mediaProvider.loadCurrentUserAvatar({ result in
|
||||
switch result {
|
||||
case .success(let avatar):
|
||||
self.viewModel.updateWithUserAvatar(avatar)
|
||||
default:
|
||||
break
|
||||
}
|
||||
})
|
||||
case .selectRoom(let roomIdentifier):
|
||||
self.completion?(.selectRoom(roomIdentifier: roomIdentifier))
|
||||
}
|
||||
|
||||
@@ -19,13 +19,11 @@ import UIKit
|
||||
|
||||
enum HomeScreenViewModelResult {
|
||||
case logout
|
||||
case loadUserAvatar
|
||||
case selectRoom(roomIdentifier: String)
|
||||
}
|
||||
|
||||
enum HomeScreenViewAction {
|
||||
case logout
|
||||
case loadUserAvatar
|
||||
case loadRoomData(roomIdentifier: String)
|
||||
case selectRoom(roomIdentifier: String)
|
||||
}
|
||||
|
||||
@@ -37,9 +37,17 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol
|
||||
|
||||
// MARK: - Setup
|
||||
|
||||
init(userDisplayName: String, mediaProvider: MediaProviderProtocol) {
|
||||
init(userDisplayName: String, userAvatarURL: String?, mediaProvider: MediaProviderProtocol) {
|
||||
self.mediaProvider = mediaProvider
|
||||
super.init(initialViewState: HomeScreenViewState(userDisplayName: userDisplayName, isLoadingRooms: true))
|
||||
|
||||
if let userAvatarURL = userAvatarURL {
|
||||
mediaProvider.loadImageFromURL(userAvatarURL) { [weak self] result in
|
||||
if case let .success(avatar) = result {
|
||||
self?.state.userAvatar = avatar
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// MARK: - Public
|
||||
@@ -50,8 +58,6 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol
|
||||
self.completion?(.logout)
|
||||
case .loadRoomData(let roomIdentifier):
|
||||
self.loadRoomDataForIdentifier(roomIdentifier)
|
||||
case .loadUserAvatar:
|
||||
self.completion?(.loadUserAvatar)
|
||||
case .selectRoom(let roomIdentifier):
|
||||
self.completion?(.selectRoom(roomIdentifier: roomIdentifier))
|
||||
}
|
||||
@@ -118,7 +124,7 @@ class HomeScreenViewModel: HomeScreenViewModelType, HomeScreenViewModelProtocol
|
||||
return
|
||||
}
|
||||
|
||||
room.loadDisplayName { [weak self] result in
|
||||
room.displayName { [weak self] result in
|
||||
guard let self = self else { return }
|
||||
|
||||
switch result {
|
||||
|
||||
@@ -23,6 +23,4 @@ protocol HomeScreenViewModelProtocol {
|
||||
var context: HomeScreenViewModelType.Context { get }
|
||||
|
||||
func updateWithRoomList(_ roomList: [RoomProxyProtocol])
|
||||
|
||||
func updateWithUserAvatar(_ avatar: UIImage?)
|
||||
}
|
||||
|
||||
@@ -79,8 +79,6 @@ struct HomeScreen: View {
|
||||
.scaledToFill()
|
||||
.frame(width: 40, height: 40, alignment: .center)
|
||||
.mask(Circle())
|
||||
} else {
|
||||
let _ = context.send(viewAction: .loadUserAvatar)
|
||||
}
|
||||
Text("Hello, \(context.viewState.userDisplayName)!")
|
||||
.font(.subheadline)
|
||||
@@ -154,6 +152,7 @@ struct RoomCell: View {
|
||||
struct HomeScreen_Previews: PreviewProvider {
|
||||
static var previews: some View {
|
||||
let viewModel = HomeScreenViewModel(userDisplayName: "Johnny Appleseed",
|
||||
userAvatarURL: nil,
|
||||
mediaProvider: MockMediaProvider())
|
||||
|
||||
let rooms = [MockRoomProxy(displayName: "Alfa"),
|
||||
|
||||
Reference in New Issue
Block a user