From 2bee5ab95dff1b61e8a0851f4ee6f1fe10536932 Mon Sep 17 00:00:00 2001 From: Stefan Ceriu Date: Tue, 20 Jun 2023 16:44:44 +0300 Subject: [PATCH] Fixes #1102 - Crashes when opening the invites screen --- .../Screens/InvitesScreen/InvitesScreenModels.swift | 8 ++++++-- .../Screens/InvitesScreen/InvitesScreenViewModel.swift | 4 ++-- .../Screens/InvitesScreen/View/InvitesScreen.swift | 4 ++-- changelog.d/1102.bugfix | 1 + 4 files changed, 11 insertions(+), 6 deletions(-) create mode 100644 changelog.d/1102.bugfix diff --git a/ElementX/Sources/Screens/InvitesScreen/InvitesScreenModels.swift b/ElementX/Sources/Screens/InvitesScreen/InvitesScreenModels.swift index 8e2a7aa14..b053f30e8 100644 --- a/ElementX/Sources/Screens/InvitesScreen/InvitesScreenModels.swift +++ b/ElementX/Sources/Screens/InvitesScreen/InvitesScreenModels.swift @@ -19,7 +19,7 @@ enum InvitesScreenViewModelAction { } struct InvitesScreenViewState: BindableState { - var invites: [InvitesScreenRoomDetails]? + var invites: [InvitesScreenRoomDetails] = [] var bindings: InvitesScreenViewStateBindings = .init() } @@ -27,7 +27,7 @@ struct InvitesScreenViewStateBindings { var alertInfo: AlertInfo? } -struct InvitesScreenRoomDetails { +struct InvitesScreenRoomDetails: Identifiable { let roomDetails: RoomSummaryDetails var inviter: RoomMemberProxyProtocol? var isUnread: Bool @@ -35,6 +35,10 @@ struct InvitesScreenRoomDetails { var isDirect: Bool { roomDetails.isDirect } + + var id: String { + roomDetails.id + } } enum InvitesScreenViewAction { diff --git a/ElementX/Sources/Screens/InvitesScreen/InvitesScreenViewModel.swift b/ElementX/Sources/Screens/InvitesScreen/InvitesScreenViewModel.swift index f98d56043..e608f796f 100644 --- a/ElementX/Sources/Screens/InvitesScreen/InvitesScreenViewModel.swift +++ b/ElementX/Sources/Screens/InvitesScreen/InvitesScreenViewModel.swift @@ -95,11 +95,11 @@ class InvitesScreenViewModel: InvitesScreenViewModelType, InvitesScreenViewModel let inviter: RoomMemberProxyProtocol? = await room.inviter() - guard let inviter, let inviteIndex = state.invites?.firstIndex(where: { $0.roomDetails.id == roomID }) else { + guard let inviter, let inviteIndex = state.invites.firstIndex(where: { $0.roomDetails.id == roomID }) else { return } - state.invites?[inviteIndex].inviter = inviter + state.invites[inviteIndex].inviter = inviter } } diff --git a/ElementX/Sources/Screens/InvitesScreen/View/InvitesScreen.swift b/ElementX/Sources/Screens/InvitesScreen/View/InvitesScreen.swift index bd561eaab..c82b1cf19 100644 --- a/ElementX/Sources/Screens/InvitesScreen/View/InvitesScreen.swift +++ b/ElementX/Sources/Screens/InvitesScreen/View/InvitesScreen.swift @@ -21,9 +21,9 @@ struct InvitesScreen: View { var body: some View { ScrollView { - if let rooms = context.viewState.invites, !rooms.isEmpty { + if !context.viewState.invites.isEmpty { LazyVStack(spacing: 0) { - ForEach(rooms, id: \.roomDetails.id) { invite in + ForEach(context.viewState.invites) { invite in InvitesScreenCell(invite: invite, imageProvider: context.imageProvider, acceptAction: { context.send(viewAction: .accept(invite)) }, diff --git a/changelog.d/1102.bugfix b/changelog.d/1102.bugfix new file mode 100644 index 000000000..ef6926045 --- /dev/null +++ b/changelog.d/1102.bugfix @@ -0,0 +1 @@ +Fixed crashes when opening the invites screen \ No newline at end of file