mirror of
https://github.com/Novaloop-AG/element-x-ios.git
synced 2026-11-03 16:10:20 +00:00
Implement the SpaceAddRoomsScreen. (#4951)
* Update proxies ready for adding rooms to a space. - ClientProxy.recentlyVisitedRooms to take a filter and to return room proxies. - Expose SpaceServiceProxy.addChildToSpace. * Implement the SpaceAddRoomsScreen. * Fix the designs of the selected carousels. Add more snapshot tests for inviting users. * Fix for screen using wrong avatar size.
This commit is contained in:
@@ -66,6 +66,7 @@ enum UserAvatarSizeOnScreen {
|
||||
case settings
|
||||
case roomDetails
|
||||
case roomMembersList
|
||||
case roomChangeRoles
|
||||
case dmDetails
|
||||
case startChat
|
||||
case memberDetails
|
||||
@@ -110,12 +111,14 @@ enum UserAvatarSizeOnScreen {
|
||||
return 44
|
||||
case .roomMembersList:
|
||||
return 32
|
||||
case .roomChangeRoles:
|
||||
return 56
|
||||
case .startChat:
|
||||
return 36
|
||||
case .memberDetails:
|
||||
return 96
|
||||
case .inviteUsers:
|
||||
return 56
|
||||
return 52
|
||||
case .editUserDetails:
|
||||
return 96
|
||||
case .dmDetails:
|
||||
@@ -153,6 +156,8 @@ enum RoomAvatarSizeOnScreen {
|
||||
case roomDirectorySearch
|
||||
case joinRoom
|
||||
case spaceHeader
|
||||
case spaceAddRooms
|
||||
case spaceAddRoomsSelected
|
||||
case completionSuggestions
|
||||
|
||||
var value: CGFloat {
|
||||
@@ -164,12 +169,10 @@ enum RoomAvatarSizeOnScreen {
|
||||
return 32
|
||||
case .notificationSettings:
|
||||
return 30
|
||||
case .messageForwarding:
|
||||
return 36
|
||||
case .globalSearch:
|
||||
return 36
|
||||
case .roomSelection:
|
||||
case .messageForwarding, .globalSearch, .roomSelection, .spaceAddRooms:
|
||||
return 36
|
||||
case .spaceAddRoomsSelected:
|
||||
return 52
|
||||
case .details:
|
||||
return 96
|
||||
case .joinRoom:
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
//
|
||||
// Copyright 2026 Element Creations Ltd.
|
||||
//
|
||||
// SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial.
|
||||
// Please see LICENSE files in the repository root for full details.
|
||||
//
|
||||
|
||||
import Compound
|
||||
import SwiftUI
|
||||
|
||||
extension View {
|
||||
func overlayRemoveItemButton(action: @escaping () -> Void) -> some View {
|
||||
modifier(RemoveItemButtonViewModifier(action: action))
|
||||
}
|
||||
}
|
||||
|
||||
private struct RemoveItemButtonViewModifier: ViewModifier {
|
||||
let action: () -> Void
|
||||
|
||||
func body(content: Content) -> some View {
|
||||
content
|
||||
.mask {
|
||||
Rectangle()
|
||||
.fill(.white)
|
||||
.overlay(alignment: .topTrailing) {
|
||||
closeButtonLabel
|
||||
.hidden()
|
||||
.padding(2)
|
||||
.overlay { Circle().fill(.black) }
|
||||
.offset(x: 2, y: -2)
|
||||
}
|
||||
.compositingGroup()
|
||||
.luminanceToAlpha()
|
||||
}
|
||||
.overlay(alignment: .topTrailing) {
|
||||
Button(action: action) {
|
||||
closeButtonLabel
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
var closeButtonLabel: some View {
|
||||
CompoundIcon(\.close, size: .custom(12), relativeTo: .compound.bodySM)
|
||||
.foregroundStyle(.compound.iconOnSolidPrimary)
|
||||
.padding(2)
|
||||
.background(.compound.iconPrimary, in: Circle())
|
||||
}
|
||||
}
|
||||
@@ -163,6 +163,8 @@ enum TestablePreviewsDictionary {
|
||||
"SettingsScreen_Previews" : SettingsScreen_Previews.self,
|
||||
"ShimmerOverlay_Previews" : ShimmerOverlay_Previews.self,
|
||||
"SoftLogoutScreen_Previews" : SoftLogoutScreen_Previews.self,
|
||||
"SpaceAddRoomsScreenSelectedItem_Previews" : SpaceAddRoomsScreenSelectedItem_Previews.self,
|
||||
"SpaceAddRoomsScreen_Previews" : SpaceAddRoomsScreen_Previews.self,
|
||||
"SpaceHeaderTopicSheetView_Previews" : SpaceHeaderTopicSheetView_Previews.self,
|
||||
"SpaceHeaderView_Previews" : SpaceHeaderView_Previews.self,
|
||||
"SpaceListScreen_Previews" : SpaceListScreen_Previews.self,
|
||||
|
||||
Reference in New Issue
Block a user