Room Member is now an interface SDK update (#711)

* migrated to the usage of a Protocol for the RoomMember

* removed unused file

* code improvement

* sliding sync new states

* sdk bump

* fix for tests

* fixing tests

* package resolved rollback

* rollback package.resolved

* fixed a mistakenly removed dependency

* Revert "fixed a mistakenly removed dependency"

This reverts commit 096d9da6142d8117bc1dfa6d5bbbd797b43b31ad.

* removing unnecessary Identifiable conformance

* pr suggestions

* pr comment
This commit is contained in:
Mauro
2023-03-22 13:36:08 +01:00
committed by GitHub
parent 8c89b06f3b
commit fe72d34d11
24 changed files with 241 additions and 126 deletions
@@ -62,7 +62,7 @@ final class RoomDetailsCoordinator: CoordinatorProtocol {
AnyView(RoomDetailsScreen(context: viewModel.context))
}
private func presentRoomMemberDetails(_ members: [RoomMemberProxy]) {
private func presentRoomMemberDetails(_ members: [RoomMemberProxyProtocol]) {
let params = RoomMemberDetailsCoordinatorParameters(mediaProvider: parameters.mediaProvider,
members: members)
let coordinator = RoomMemberDetailsCoordinator(parameters: params)
@@ -22,7 +22,7 @@ import UIKit
// MARK: View model
enum RoomDetailsViewModelAction {
case requestMemberDetailsPresentation([RoomMemberProxy])
case requestMemberDetailsPresentation([RoomMemberProxyProtocol])
case leftRoom
case cancel
}
@@ -86,8 +86,8 @@ struct RoomDetailsMember: Identifiable, Equatable {
let name: String?
let avatarURL: URL?
init(withProxy proxy: RoomMemberProxy) {
id = proxy.userId
init(withProxy proxy: RoomMemberProxyProtocol) {
id = proxy.userID
name = proxy.displayName
avatarURL = proxy.avatarURL
}
@@ -20,7 +20,7 @@ typealias RoomDetailsViewModelType = StateStoreViewModel<RoomDetailsViewState, R
class RoomDetailsViewModel: RoomDetailsViewModelType, RoomDetailsViewModelProtocol {
private let roomProxy: RoomProxyProtocol
private var members: [RoomMemberProxy] = [] {
private var members: [RoomMemberProxyProtocol] = [] {
didSet {
state.members = members.map { RoomDetailsMember(withProxy: $0) }
}
@@ -182,7 +182,7 @@ struct RoomDetailsScreen: View {
struct RoomDetails_Previews: PreviewProvider {
static let viewModel = {
let members: [RoomMemberProxy] = [
let members: [RoomMemberProxyMock] = [
.mockAlice,
.mockBob,
.mockCharlie
@@ -18,7 +18,7 @@ import SwiftUI
struct RoomMemberDetailsCoordinatorParameters {
let mediaProvider: MediaProviderProtocol
let members: [RoomMemberProxy]
let members: [RoomMemberProxyProtocol]
}
enum RoomMemberDetailsCoordinatorAction {
@@ -24,7 +24,7 @@ class RoomMemberDetailsViewModel: RoomMemberDetailsViewModelType, RoomMemberDeta
var callback: ((RoomMemberDetailsViewModelAction) -> Void)?
init(mediaProvider: MediaProviderProtocol,
members: [RoomMemberProxy]) {
members: [RoomMemberProxyProtocol]) {
self.mediaProvider = mediaProvider
super.init(initialViewState: .init(members: members.map { RoomDetailsMember(withProxy: $0) },
bindings: .init()),
@@ -48,7 +48,7 @@ struct RoomMemberDetailsMemberCell: View {
struct RoomMemberDetailsMemberCell_Previews: PreviewProvider {
static var previews: some View {
let members: [RoomMemberProxy] = [
let members: [RoomMemberProxyMock] = [
.mockAlice,
.mockBob,
.mockCharlie
@@ -57,7 +57,7 @@ struct RoomMemberDetailsMemberCell_Previews: PreviewProvider {
members: members)
return VStack {
ForEach(members) { member in
ForEach(members, id: \.userID) { member in
RoomMemberDetailsMemberCell(member: .init(withProxy: member), context: viewModel.context)
}
}
@@ -50,7 +50,7 @@ struct RoomMemberDetailsScreen: View {
struct RoomMemberDetails_Previews: PreviewProvider {
static let viewModel = {
let members: [RoomMemberProxy] = [
let members: [RoomMemberProxyMock] = [
.mockAlice,
.mockBob,
.mockCharlie
@@ -25,7 +25,7 @@ struct StartChatViewState: BindableState {
var bindings = StartChatScreenViewStateBindings()
// TODO: bind with real service, and mock data only in preview
var suggestedUsers: [RoomMemberProxy] = [.mockAlice, .mockBob, .mockCharlie]
var suggestedUsers: [RoomMemberProxyMock] = [.mockAlice, .mockBob, .mockCharlie]
}
struct StartChatScreenViewStateBindings {
@@ -60,7 +60,7 @@ struct StartChatScreen: View {
private var suggestionsSection: some View {
Section {
ForEach(context.viewState.suggestedUsers, id: \.userId) { user in
ForEach(context.viewState.suggestedUsers, id: \.userID) { user in
StartChatSuggestedUserCell(user: user, imageProvider: context.imageProvider)
}
} header: {
@@ -17,14 +17,14 @@
import SwiftUI
struct StartChatSuggestedUserCell: View {
let user: RoomMemberProxy
let user: RoomMemberProxyProtocol
let imageProvider: ImageProviderProtocol?
var body: some View {
HStack(spacing: 13) {
LoadableAvatarImage(url: user.avatarURL,
name: user.displayName,
contentID: user.userId,
contentID: user.userID,
avatarSize: .user(on: .home),
imageProvider: imageProvider)
.accessibilityHidden(true)
@@ -32,11 +32,11 @@ struct StartChatSuggestedUserCell: View {
VStack(alignment: .leading, spacing: 4) {
// covers both nil and empty state
let displayName = user.displayName ?? ""
Text(displayName.isEmpty ? user.userId : displayName)
Text(displayName.isEmpty ? user.userID : displayName)
.font(.element.title3)
.foregroundColor(.element.primaryContent)
if !displayName.isEmpty {
Text(user.userId)
Text(user.userID)
.font(.element.subheadline)
.foregroundColor(.element.tertiaryContent)
}