diff --git a/ElementX/Sources/Mocks/Generated/GeneratedMocks.swift b/ElementX/Sources/Mocks/Generated/GeneratedMocks.swift index a7e79c320..aa9ae992c 100644 --- a/ElementX/Sources/Mocks/Generated/GeneratedMocks.swift +++ b/ElementX/Sources/Mocks/Generated/GeneratedMocks.swift @@ -16009,7 +16009,6 @@ class SpaceRoomProxyMock: SpaceRoomProxyProtocol, @unchecked Sendable { } var underlyingIsSpace: Bool! var isDirect: Bool? - var parent: SpaceRoomProxyProtocol? var childrenCount: Int { get { return underlyingChildrenCount } set(value) { underlyingChildrenCount = value } diff --git a/ElementX/Sources/Mocks/SpaceRoomProxyMock.swift b/ElementX/Sources/Mocks/SpaceRoomProxyMock.swift index 88b32abdc..84d3df2fd 100644 --- a/ElementX/Sources/Mocks/SpaceRoomProxyMock.swift +++ b/ElementX/Sources/Mocks/SpaceRoomProxyMock.swift @@ -16,7 +16,6 @@ extension SpaceRoomProxyMock { var isSpace: Bool var isDirect: Bool? - var parent: SpaceRoomProxyProtocol? var childrenCount = 0 var joinedMembersCount = 0 @@ -38,7 +37,6 @@ extension SpaceRoomProxyMock { avatarURL = configuration.avatarURL isSpace = configuration.isSpace isDirect = configuration.isDirect - parent = configuration.parent childrenCount = configuration.childrenCount joinedMembersCount = configuration.joinedMembersCount heroes = configuration.heroes @@ -129,7 +127,6 @@ extension [SpaceRoomProxyProtocol] { SpaceRoomProxyMock(.init(id: "!\(typeName.lowercased())3:matrix.org", name: "Joined \(typeName)", isSpace: isSpace, - parent: SpaceRoomProxyMock(.init(name: "Company", isSpace: true)), joinedMembersCount: 123, topic: "Discussion on specific topic goes here.", joinRule: .restricted(rules: []), diff --git a/ElementX/Sources/Screens/JoinRoomScreen/JoinRoomScreenModels.swift b/ElementX/Sources/Screens/JoinRoomScreen/JoinRoomScreenModels.swift index e9ea7fa8a..e002a13f8 100644 --- a/ElementX/Sources/Screens/JoinRoomScreen/JoinRoomScreenModels.swift +++ b/ElementX/Sources/Screens/JoinRoomScreen/JoinRoomScreenModels.swift @@ -75,8 +75,8 @@ struct JoinRoomScreenViewState: BindableState { } var subtitle: String? { - if roomDetails?.isSpace == true, let spaceVisibilityTitle, let childrenCount = roomDetails?.childrenCount { - return L10n.screenSpaceListDetails(spaceVisibilityTitle, L10n.commonRooms(childrenCount)) + if roomDetails?.isSpace == true, let spaceVisibilityTitle { + return spaceVisibilityTitle } else { switch mode { case .invited(isDM: true): @@ -98,7 +98,7 @@ struct JoinRoomScreenViewState: BindableState { return switch roomDetails?.spaceVisibility { case .public: \.public case .private: \.lock - case .restricted(let parentName): \.space + case .restricted: \.space case .none: \.lock } } @@ -107,7 +107,7 @@ struct JoinRoomScreenViewState: BindableState { switch roomDetails?.spaceVisibility { case .public: L10n.commonPublicSpace case .private: L10n.commonPrivateSpace - case .restricted(let parentName): L10n.screenSpaceListParentSpace(parentName) + case .restricted: L10n.commonSharedSpace case .none: L10n.commonPrivateSpace } } diff --git a/ElementX/Sources/Screens/Spaces/Common/SpaceHeaderView.swift b/ElementX/Sources/Screens/Spaces/Common/SpaceHeaderView.swift index 73af0a9f4..10be90eb7 100644 --- a/ElementX/Sources/Screens/Spaces/Common/SpaceHeaderView.swift +++ b/ElementX/Sources/Screens/Spaces/Common/SpaceHeaderView.swift @@ -63,7 +63,7 @@ struct SpaceHeaderView: View { var spaceDetails: some View { Label { - Text(L10n.screenSpaceListDetails(spaceDetailsVisibilityTitle, L10n.commonRooms(spaceRoomProxy.childrenCount))) + Text(spaceDetailsVisibilityTitle) .font(.compound.bodyLG) .foregroundStyle(.compound.textSecondary) .multilineTextAlignment(.center) @@ -77,7 +77,7 @@ struct SpaceHeaderView: View { switch spaceRoomProxy.visibility { case .public: L10n.commonPublicSpace case .private: L10n.commonPrivateSpace - case .restricted(let parentName): L10n.screenSpaceListParentSpace(parentName) + case .restricted: L10n.commonSharedSpace case .none: L10n.commonPrivateSpace } } @@ -125,7 +125,6 @@ struct SpaceHeaderView_Previews: PreviewProvider, TestablePreview { SpaceRoomProxyMock(.init(id: "!space3:matrix.org", name: "Subspace", isSpace: true, - parent: SpaceRoomProxyMock(.init(name: "Foundation", isSpace: true)), childrenCount: 30, joinedMembersCount: 123, heroes: [.mockDan, .mockBob, .mockCharlie, .mockVerbose], diff --git a/ElementX/Sources/Screens/Spaces/Common/SpaceRoomCell.swift b/ElementX/Sources/Screens/Spaces/Common/SpaceRoomCell.swift index 24390fda1..2bef3057e 100644 --- a/ElementX/Sources/Screens/Spaces/Common/SpaceRoomCell.swift +++ b/ElementX/Sources/Screens/Spaces/Common/SpaceRoomCell.swift @@ -28,7 +28,7 @@ struct SpaceRoomCell: View { switch spaceRoomProxy.visibility { case .public: L10n.commonPublicSpace case .private: L10n.commonPrivateSpace - case .restricted(let parentName): L10n.screenSpaceListParentSpace(parentName) + case .restricted: L10n.commonSharedSpace case .none: L10n.commonPrivateSpace } } else { @@ -47,8 +47,7 @@ struct SpaceRoomCell: View { private var details: String { if spaceRoomProxy.isSpace { - L10n.screenSpaceListDetails(L10n.commonRooms(spaceRoomProxy.childrenCount), - L10n.commonMemberCount(spaceRoomProxy.joinedMembersCount)) + L10n.commonMemberCount(spaceRoomProxy.joinedMembersCount) } else { spaceRoomProxy.topic ?? " " // Use a single space to reserve a consistent amount of space. } diff --git a/ElementX/Sources/Screens/Spaces/SpaceListScreen/SpaceListScreenModels.swift b/ElementX/Sources/Screens/Spaces/SpaceListScreen/SpaceListScreenModels.swift index 4abc1d54a..8b6f96f11 100644 --- a/ElementX/Sources/Screens/Spaces/SpaceListScreen/SpaceListScreenModels.swift +++ b/ElementX/Sources/Screens/Spaces/SpaceListScreen/SpaceListScreenModels.swift @@ -21,14 +21,6 @@ struct SpaceListScreenViewState: BindableState { var selectedSpaceID: String? var bindings: SpaceListScreenViewStateBindings - - var subtitle: String { - L10n.screenSpaceListDetails(L10n.commonSpaces(joinedSpaces.count), L10n.commonRooms(joinedRoomsCount)) - } - - var joinedRoomsCount: Int { - joinedSpaces.map(\.childrenCount).reduce(0, +) - } } struct SpaceListScreenViewStateBindings { diff --git a/ElementX/Sources/Screens/Spaces/SpaceListScreen/View/SpaceListScreen.swift b/ElementX/Sources/Screens/Spaces/SpaceListScreen/View/SpaceListScreen.swift index 590828707..120c12082 100644 --- a/ElementX/Sources/Screens/Spaces/SpaceListScreen/View/SpaceListScreen.swift +++ b/ElementX/Sources/Screens/Spaces/SpaceListScreen/View/SpaceListScreen.swift @@ -39,7 +39,7 @@ struct SpaceListScreen: View { .foregroundStyle(.compound.textPrimary) .multilineTextAlignment(.center) - Text(context.viewState.subtitle) + Text(L10n.commonSpaces(context.viewState.joinedSpaces.count)) .font(.compound.bodyLG) .foregroundStyle(.compound.textSecondary) .multilineTextAlignment(.center) diff --git a/ElementX/Sources/Screens/Spaces/SpaceScreen/View/LeaveSpaceView.swift b/ElementX/Sources/Screens/Spaces/SpaceScreen/View/LeaveSpaceView.swift index da07f6163..e39dee311 100644 --- a/ElementX/Sources/Screens/Spaces/SpaceScreen/View/LeaveSpaceView.swift +++ b/ElementX/Sources/Screens/Spaces/SpaceScreen/View/LeaveSpaceView.swift @@ -153,7 +153,6 @@ struct LeaveSpaceView_Previews: PreviewProvider, TestablePreview { static let spaceRoomProxy = SpaceRoomProxyMock(.init(id: "!eng-space:matrix.org", name: "Engineering Team", isSpace: true, - parent: SpaceRoomProxyMock(.init(name: "MegaGroup", isSpace: true)), childrenCount: 30, joinedMembersCount: 76, heroes: [.mockDan, .mockBob, .mockCharlie, .mockVerbose], diff --git a/ElementX/Sources/Screens/Spaces/SpaceScreen/View/SpaceScreen.swift b/ElementX/Sources/Screens/Spaces/SpaceScreen/View/SpaceScreen.swift index 68e1b52dc..bd4006c48 100644 --- a/ElementX/Sources/Screens/Spaces/SpaceScreen/View/SpaceScreen.swift +++ b/ElementX/Sources/Screens/Spaces/SpaceScreen/View/SpaceScreen.swift @@ -89,7 +89,6 @@ struct SpaceScreen_Previews: PreviewProvider, TestablePreview { let spaceRoomProxy = SpaceRoomProxyMock(.init(id: "!eng-space:matrix.org", name: "Engineering Team", isSpace: true, - parent: SpaceRoomProxyMock(.init(name: "MegaGroup", isSpace: true)), childrenCount: 30, joinedMembersCount: 76, heroes: [.mockDan, .mockBob, .mockCharlie, .mockVerbose], diff --git a/ElementX/Sources/Services/Spaces/LeaveSpaceHandleProxy.swift b/ElementX/Sources/Services/Spaces/LeaveSpaceHandleProxy.swift index 4a4e1fa1f..641002cbb 100644 --- a/ElementX/Sources/Services/Spaces/LeaveSpaceHandleProxy.swift +++ b/ElementX/Sources/Services/Spaces/LeaveSpaceHandleProxy.swift @@ -34,7 +34,7 @@ class LeaveSpaceHandleProxy: Identifiable { room.spaceRoom.roomId != spaceID else { return nil } - return .init(spaceRoomProxy: SpaceRoomProxy(spaceRoom: room.spaceRoom, parent: nil), + return .init(spaceRoomProxy: SpaceRoomProxy(spaceRoom: room.spaceRoom), isLastAdmin: room.isLastAdmin, isSelected: !room.isLastAdmin) } diff --git a/ElementX/Sources/Services/Spaces/SpaceRoomListProxy.swift b/ElementX/Sources/Services/Spaces/SpaceRoomListProxy.swift index 2803633d4..f5e76d778 100644 --- a/ElementX/Sources/Services/Spaces/SpaceRoomListProxy.swift +++ b/ElementX/Sources/Services/Spaces/SpaceRoomListProxy.swift @@ -21,12 +21,11 @@ class SpaceRoomListProxy: SpaceRoomListProxyProtocol { private let paginationStateHandle: TaskHandle let paginationStatePublisher: CurrentValuePublisher - // Parent is temporary until we get the restricted AllowRules from the server. - init(_ spaceRoomList: SpaceRoomListProtocol, parent: SpaceRoomProxyProtocol?) throws { + init(_ spaceRoomList: SpaceRoomListProtocol) throws { guard let spaceRoom = spaceRoomList.space() else { throw SpaceRoomListProxyError.missingSpace } self.spaceRoomList = spaceRoomList - spaceRoomProxy = SpaceRoomProxy(spaceRoom: spaceRoom, parent: parent) + spaceRoomProxy = SpaceRoomProxy(spaceRoom: spaceRoom) let paginationStateSubject = CurrentValueSubject(spaceRoomList.paginationState()) paginationStatePublisher = paginationStateSubject.asCurrentValuePublisher() @@ -56,27 +55,27 @@ class SpaceRoomListProxy: SpaceRoomListProxyProtocol { for update in updates { switch update { case .append(let spaceRooms): - rooms.append(contentsOf: spaceRooms.map { SpaceRoomProxy(spaceRoom: $0, parent: spaceRoomProxy) }) + rooms.append(contentsOf: spaceRooms.map(SpaceRoomProxy.init)) case .clear: rooms.removeAll() case .pushFront(let spaceRoom): - rooms.insert(SpaceRoomProxy(spaceRoom: spaceRoom, parent: spaceRoomProxy), at: 0) + rooms.insert(SpaceRoomProxy(spaceRoom: spaceRoom), at: 0) case .pushBack(let spaceRoom): - rooms.append(SpaceRoomProxy(spaceRoom: spaceRoom, parent: spaceRoomProxy)) + rooms.append(SpaceRoomProxy(spaceRoom: spaceRoom)) case .popFront: rooms.removeFirst() case .popBack: rooms.removeLast() case .insert(let index, let spaceRoom): - rooms.insert(SpaceRoomProxy(spaceRoom: spaceRoom, parent: spaceRoomProxy), at: Int(index)) + rooms.insert(SpaceRoomProxy(spaceRoom: spaceRoom), at: Int(index)) case .set(let index, let spaceRoom): - rooms[Int(index)] = SpaceRoomProxy(spaceRoom: spaceRoom, parent: spaceRoomProxy) + rooms[Int(index)] = SpaceRoomProxy(spaceRoom: spaceRoom) case .remove(let index): rooms.remove(at: Int(index)) case .truncate(let length): rooms.removeSubrange(Int(length).. Result { do { - return try await .success(SpaceRoomListProxy(spaceService.spaceRoomList(spaceId: spaceID), parent: parent)) + return try await .success(SpaceRoomListProxy(spaceService.spaceRoomList(spaceId: spaceID))) } catch { MXLog.error("Failed creating space room list for \(spaceID): \(error)") return .failure(.sdkError(error)) @@ -57,27 +56,27 @@ class SpaceServiceProxy: SpaceServiceProxyProtocol { for update in updates { switch update { case .append(let spaceRooms): - spaces.append(contentsOf: spaceRooms.map { SpaceRoomProxy(spaceRoom: $0, parent: nil) }) + spaces.append(contentsOf: spaceRooms.map(SpaceRoomProxy.init)) case .clear: spaces.removeAll() case .pushFront(let spaceRoom): - spaces.insert(SpaceRoomProxy(spaceRoom: spaceRoom, parent: nil), at: 0) + spaces.insert(SpaceRoomProxy(spaceRoom: spaceRoom), at: 0) case .pushBack(let spaceRoom): - spaces.append(SpaceRoomProxy(spaceRoom: spaceRoom, parent: nil)) + spaces.append(SpaceRoomProxy(spaceRoom: spaceRoom)) case .popFront: spaces.removeFirst() case .popBack: spaces.removeLast() case .insert(let index, let spaceRoom): - spaces.insert(SpaceRoomProxy(spaceRoom: spaceRoom, parent: nil), at: Int(index)) + spaces.insert(SpaceRoomProxy(spaceRoom: spaceRoom), at: Int(index)) case .set(let index, let spaceRoom): - spaces[Int(index)] = SpaceRoomProxy(spaceRoom: spaceRoom, parent: nil) + spaces[Int(index)] = SpaceRoomProxy(spaceRoom: spaceRoom) case .remove(let index): spaces.remove(at: Int(index)) case .truncate(let length): spaces.removeSubrange(Int(length)..