mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-02 21:33:26 +00:00
More space tweaks (#4584)
* Remove the room count everywhere. * Remove the parent name from restricted spaces.
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user