More space tweaks (#4584)

* Remove the room count everywhere.

* Remove the parent name from restricted spaces.
This commit is contained in:
Doug
2025-10-07 10:57:53 +01:00
committed by GitHub
parent 8cd5c9862e
commit c03ed528ba
71 changed files with 140 additions and 172 deletions
@@ -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 }
@@ -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: []),
@@ -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
}
}
@@ -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],
@@ -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.
}
@@ -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 {
@@ -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)
@@ -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],
@@ -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],
@@ -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)
}
@@ -21,12 +21,11 @@ class SpaceRoomListProxy: SpaceRoomListProxyProtocol {
private let paginationStateHandle: TaskHandle
let paginationStatePublisher: CurrentValuePublisher<SpaceRoomListPaginationState, Never>
// 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<SpaceRoomListPaginationState, Never>(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)..<rooms.count)
case .reset(let spaceRooms):
rooms = spaceRooms.map { SpaceRoomProxy(spaceRoom: $0, parent: spaceRoomProxy) }
rooms = spaceRooms.map(SpaceRoomProxy.init)
}
}
@@ -10,15 +10,9 @@ import MatrixRustSDK
class SpaceRoomProxy: SpaceRoomProxyProtocol {
private let spaceRoom: SpaceRoom
let parent: SpaceRoomProxyProtocol?
/// Proxies a `SpaceRoom` from the Rust SDK.
/// - Parameters:
/// - spaceRoom: The `SpaceRoom` to proxy.
/// - parent: A temporary parameter until we get the `AllowRule`s from the server.
init(spaceRoom: SpaceRoom, parent: SpaceRoomProxyProtocol?) {
init(spaceRoom: SpaceRoom) {
self.spaceRoom = spaceRoom
self.parent = parent
}
lazy var id = spaceRoom.roomId
@@ -11,7 +11,7 @@ import MatrixRustSDK
enum SpaceRoomProxyVisibility: Equatable {
case `public`
case `private`
case restricted(parentName: String)
case restricted
// We can add the external case in here eventually.
}
@@ -23,8 +23,6 @@ protocol SpaceRoomProxyProtocol {
var isSpace: Bool { get }
var isDirect: Bool? { get }
/// A temporary property until we get the `AllowRule`s from the server.
var parent: SpaceRoomProxyProtocol? { get }
var childrenCount: Int { get }
var joinedMembersCount: Int { get }
@@ -63,12 +61,7 @@ extension SpaceRoomProxyProtocol {
case .public:
.public
case .restricted, .knockRestricted:
// Temporary solution until the server includes the `AllowRule` values (they're always empty right now).
if let parent {
.restricted(parentName: parent.computedName)
} else {
.private
}
.restricted
case .invite, .knock, .private, .custom:
.private
case .none:
@@ -30,10 +30,9 @@ class SpaceServiceProxy: SpaceServiceProxyProtocol {
})
}
// The parent here is temporary until we get the restricted AllowRules from the server.
func spaceRoomList(spaceID: String, parent: SpaceRoomProxyProtocol?) async -> Result<SpaceRoomListProxyProtocol, SpaceServiceProxyError> {
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)..<spaces.count)
case .reset(let spaceRooms):
spaces = spaceRooms.map { SpaceRoomProxy(spaceRoom: $0, parent: nil) }
spaces = spaceRooms.map(SpaceRoomProxy.init)
}
}