Room member details cleanup (#452)

* Fixes #421 - Stop loading room members twice for displaying the members screen
* Rename RoomMembers to RoomMemberDetails throughout
* Add changelog
This commit is contained in:
Stefan Ceriu
2023-01-17 09:31:53 +02:00
committed by GitHub
parent 1b9d1fedf1
commit 4b56e4af73
15 changed files with 113 additions and 132 deletions
@@ -16,11 +16,11 @@
import SwiftUI
struct RoomMembersMemberCell: View {
struct RoomMemberDetailsMemberCell: View {
@ScaledMetric private var avatarSize = AvatarSize.user(on: .roomDetails).value
let member: RoomDetailsMember
let context: RoomMembersViewModel.Context
let context: RoomMemberDetailsViewModel.Context
var body: some View {
Button {
@@ -56,7 +56,7 @@ struct RoomMembersMemberCell: View {
}
}
struct RoomMembersMemberCell_Previews: PreviewProvider {
struct RoomMemberDetailsMemberCell_Previews: PreviewProvider {
static var previews: some View {
body.preferredColorScheme(.light)
.tint(.element.accent)
@@ -70,14 +70,12 @@ struct RoomMembersMemberCell_Previews: PreviewProvider {
.mockBob,
.mockCharlie
]
let roomProxy = MockRoomProxy(displayName: "Room A",
members: members)
let viewModel = RoomMembersViewModel(roomProxy: roomProxy,
mediaProvider: MockMediaProvider())
let viewModel = RoomMemberDetailsViewModel(mediaProvider: MockMediaProvider(),
members: members)
return VStack {
ForEach(members) { member in
RoomMembersMemberCell(member: .init(withProxy: member), context: viewModel.context)
RoomMemberDetailsMemberCell(member: .init(withProxy: member), context: viewModel.context)
}
}
}
@@ -16,22 +16,25 @@
import SwiftUI
struct RoomMembersScreen: View {
struct RoomMemberDetailsScreen: View {
@Environment(\.colorScheme) private var colorScheme
@ObservedObject var context: RoomMembersViewModel.Context
@ObservedObject var context: RoomMemberDetailsViewModel.Context
var body: some View {
Form {
Section {
ForEach(context.viewState.visibleMembers) { member in
RoomMembersMemberCell(member: member, context: context)
.id(member.id)
ScrollView {
LazyVStack(alignment: .leading) {
Section {
ForEach(context.viewState.visibleMembers) { member in
RoomMemberDetailsMemberCell(member: member, context: context)
.id(member.id)
}
} footer: {
Text(ElementL10n.roomTitleMembers(context.viewState.members.count))
.foregroundColor(.element.secondaryContent)
.font(.element.footnote)
}
} footer: {
Text(ElementL10n.roomTitleMembers(context.viewState.members.count))
.foregroundColor(.element.secondaryContent)
.font(.element.footnote)
.padding(.horizontal)
}
}
.searchable(text: $context.searchQuery, placement: .navigationBarDrawer(displayMode: .always))
@@ -42,7 +45,7 @@ struct RoomMembersScreen: View {
// MARK: - Previews
struct RoomMembers_Previews: PreviewProvider {
struct RoomMemberDetails_Previews: PreviewProvider {
static var previews: some View {
Group {
let members: [RoomMemberProxy] = [
@@ -50,11 +53,9 @@ struct RoomMembers_Previews: PreviewProvider {
.mockBob,
.mockCharlie
]
let roomProxy = MockRoomProxy(displayName: "Room A",
members: members)
let viewModel = RoomMembersViewModel(roomProxy: roomProxy,
mediaProvider: MockMediaProvider())
RoomMembersScreen(context: viewModel.context)
let viewModel = RoomMemberDetailsViewModel(mediaProvider: MockMediaProvider(),
members: members)
RoomMemberDetailsScreen(context: viewModel.context)
}
.tint(.element.accent)
}