mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 21:33:26 +00:00
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:
+7
-9
@@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
+18
-17
@@ -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)
|
||||
}
|
||||
Reference in New Issue
Block a user