updated the SDK and included the fix for leaving a space when the last owner of a non empty space

This commit is contained in:
Mauro Romito
2026-01-23 16:22:07 +01:00
committed by Mauro
parent 8f8ea473f5
commit a3683ea996
8 changed files with 96 additions and 91 deletions
@@ -21,7 +21,7 @@ struct LeaveSpaceViewState: BindableState {
var title: String {
switch leaveHandle.mode {
case .lastSpaceAdmin: L10n.screenLeaveSpaceTitleLastAdmin(spaceName)
case .spaceNeedsNewOwner: L10n.screenLeaveSpaceTitleLastAdmin(spaceName)
default: L10n.screenLeaveSpaceTitle(spaceName)
}
}
@@ -29,9 +29,9 @@ struct LeaveSpaceViewState: BindableState {
var subtitle: String? {
switch leaveHandle.mode {
case .manyRooms: L10n.screenLeaveSpaceSubtitle
case .onlyAdminRooms: L10n.screenLeaveSpaceSubtitleOnlyLastAdmin
case .roomsNeedNewOwner: L10n.screenLeaveSpaceSubtitleOnlyLastAdmin
case .noRooms: nil
case .lastSpaceAdmin: L10n.screenLeaveSpaceSubtitleLastAdmin
case .spaceNeedsNewOwner: L10n.screenLeaveSpaceSubtitleLastAdmin
}
}
@@ -21,7 +21,7 @@ struct LeaveSpaceRoomDetailsCell: View {
private var subtitle: String? {
guard !room.spaceServiceRoom.isSpace else { return nil }
let memberCount = L10n.commonMemberCount(room.spaceServiceRoom.joinedMembersCount)
return room.isLastAdmin ? L10n.screenLeaveSpaceLastAdminInfo(memberCount) : memberCount
return !room.canLeave ? L10n.screenLeaveSpaceLastAdminInfo(memberCount) : memberCount
}
var visibilityIcon: KeyPath<CompoundIcons, Image>? {
@@ -94,38 +94,44 @@ struct LeaveSpaceRoomDetailsCell_Previews: PreviewProvider, TestablePreview {
LeaveSpaceRoomDetailsCell(room: .init(spaceServiceRoom: SpaceServiceRoomMock(.init(id: "1",
name: "Space",
isSpace: true)),
isLastAdmin: false,
isLastOwner: false,
areCreatorsPrivileged: false,
isSelected: true),
mediaProvider: MediaProviderMock(configuration: .init())) { }
LeaveSpaceRoomDetailsCell(room: .init(spaceServiceRoom: SpaceServiceRoomMock(.init(id: "2",
name: "My Space",
isSpace: true)),
isLastAdmin: true,
isLastOwner: true,
areCreatorsPrivileged: false,
isSelected: false),
mediaProvider: MediaProviderMock(configuration: .init())) { }
LeaveSpaceRoomDetailsCell(room: .init(spaceServiceRoom: SpaceServiceRoomMock(.init(id: "2",
name: "My Space",
isSpace: true)),
isLastAdmin: true,
isLastOwner: true,
areCreatorsPrivileged: false,
isSelected: false),
hideSelection: true,
mediaProvider: MediaProviderMock(configuration: .init())) { }
LeaveSpaceRoomDetailsCell(room: .init(spaceServiceRoom: SpaceServiceRoomMock(.init(id: "3",
name: "Room",
isSpace: false)),
isLastAdmin: false,
isLastOwner: false,
areCreatorsPrivileged: false,
isSelected: true),
mediaProvider: MediaProviderMock(configuration: .init())) { }
LeaveSpaceRoomDetailsCell(room: .init(spaceServiceRoom: SpaceServiceRoomMock(.init(id: "4",
name: "My Room",
isSpace: false)),
isLastAdmin: true,
isLastOwner: true,
areCreatorsPrivileged: false,
isSelected: false),
mediaProvider: MediaProviderMock(configuration: .init())) { }
LeaveSpaceRoomDetailsCell(room: .init(spaceServiceRoom: SpaceServiceRoomMock(.init(id: "4",
name: "My Room",
isSpace: false)),
isLastAdmin: true,
isLastOwner: true,
areCreatorsPrivileged: false,
isSelected: false),
hideSelection: true,
mediaProvider: MediaProviderMock(configuration: .init())) { }
@@ -66,11 +66,11 @@ struct LeaveSpaceView: View {
Section {
ForEach(context.viewState.leaveHandle.rooms, id: \.spaceServiceRoom.id) { room in
LeaveSpaceRoomDetailsCell(room: room,
hideSelection: context.viewState.leaveHandle.mode == .onlyAdminRooms,
hideSelection: context.viewState.leaveHandle.mode == .roomsNeedNewOwner,
mediaProvider: context.mediaProvider) {
context.send(viewAction: .toggleRoom(roomID: room.spaceServiceRoom.id))
}
.disabled(room.isLastAdmin)
.disabled(!room.canLeave)
}
} header: {
if context.viewState.leaveHandle.mode == .manyRooms {
@@ -121,9 +121,9 @@ import MatrixRustSDKMocks
struct LeaveSpaceView_Previews: PreviewProvider, TestablePreview {
static let manyViewModel = makeViewModel(mode: .manyRooms)
static let onlyAdminViewModel = makeViewModel(mode: .onlyAdminRooms)
static let onlyAdminViewModel = makeViewModel(mode: .roomsNeedNewOwner)
static let noRoomsViewModel = makeViewModel(mode: .noRooms)
static let lastAdminViewModel = makeViewModel(mode: .lastSpaceAdmin)
static let lastAdminViewModel = makeViewModel(mode: .spaceNeedsNewOwner)
static var previews: some View {
LeaveSpaceView(context: manyViewModel.context)
@@ -148,9 +148,9 @@ struct LeaveSpaceView_Previews: PreviewProvider, TestablePreview {
static func makeViewModel(mode: LeaveSpaceHandleProxy.Mode) -> LeaveSpaceViewModel {
let rooms: [LeaveSpaceRoom] = switch mode {
case .manyRooms: .mockRooms
case .onlyAdminRooms: .mockAdminRooms
case .noRooms: .mockSingleSpace(spaceServiceRoom: spaceServiceRoom, isLastAdmin: false)
case .lastSpaceAdmin: .mockRoomsWithSpace(spaceServiceRoom: spaceServiceRoom, isLastAdmin: true)
case .roomsNeedNewOwner: .mockNeedNewOwnerRooms
case .noRooms: .mockSingleSpace(spaceServiceRoom: spaceServiceRoom, isLastOwner: false)
case .spaceNeedsNewOwner: .mockRoomsWithSpace(spaceServiceRoom: spaceServiceRoom, isLastOwner: true)
}
let leaveHandle = LeaveSpaceHandleProxy(spaceID: spaceServiceRoom.id,