Space Settings - Navigations (#4691)

* Implementation for all navigations inside the space settings aside the left space action

* pr suggestions
This commit is contained in:
Mauro
2025-11-05 18:07:44 +01:00
committed by GitHub
parent 5702243f19
commit 2558d92f50
10 changed files with 287 additions and 17 deletions
@@ -23,6 +23,7 @@ struct RoomDetailsEditScreenViewStateBindings {
struct RoomDetailsEditScreenViewState: BindableState {
let roomID: String
let isSpace: Bool
let initialAvatarURL: URL?
let initialName: String
let initialTopic: String
@@ -34,8 +34,10 @@ class RoomDetailsEditScreenViewModel: RoomDetailsEditScreenViewModelType, RoomDe
let roomAvatar = roomProxy.infoPublisher.value.avatarURL
let roomName = roomProxy.infoPublisher.value.displayName
let roomTopic = roomProxy.infoPublisher.value.topic
let isSpace = roomProxy.infoPublisher.value.isSpace
super.init(initialViewState: RoomDetailsEditScreenViewState(roomID: roomProxy.id,
isSpace: isSpace,
initialAvatarURL: roomAvatar,
initialName: roomName ?? "",
initialTopic: roomTopic ?? "",
@@ -59,6 +59,7 @@ struct RoomDetailsEditScreen: View {
url: context.viewState.avatarURL,
name: context.viewState.initialName,
contentID: context.viewState.roomID,
isSpace: context.viewState.isSpace,
avatarSize: .user(on: .memberDetails),
mediaProvider: context.mediaProvider)
.accessibilityLabel(L10n.a11yEditAvatar)
@@ -142,9 +142,14 @@ struct SecurityAndPrivacyScreen: View {
private var addAddressSection: some View {
Section {
ListRow(kind: .custom {
Button(L10n.screenSecurityAndPrivacyAddRoomAddressAction) { context.send(viewAction: .editAddress) }
.foregroundColor(.compound.textActionAccent)
.padding(ListRowPadding.insets)
Button {
context.send(viewAction: .editAddress)
} label: {
Text(L10n.screenSecurityAndPrivacyAddRoomAddressAction)
.foregroundColor(.compound.textActionAccent)
.frame(maxWidth: .infinity, alignment: .leading)
}
.padding(ListRowPadding.insets)
})
}
}
@@ -55,6 +55,7 @@ struct UserDetailsEditScreen: View {
url: context.viewState.selectedAvatarURL,
name: context.viewState.currentDisplayName,
contentID: context.viewState.userID,
isSpace: false,
avatarSize: .user(on: .editUserDetails),
mediaProvider: context.mediaProvider)
.overlay(alignment: .bottomTrailing) {
@@ -18,7 +18,12 @@ struct SpaceSettingsScreenCoordinatorParameters {
let appSettings: AppSettings
}
enum SpaceSettingsScreenCoordinatorAction { }
enum SpaceSettingsScreenCoordinatorAction {
case presentEditDetailsScreen
case presentSecurityAndPrivacyScreen
case presentMembersListScreen
case presentRolesAndPermissionsScreen
}
final class SpaceSettingsScreenCoordinator: CoordinatorProtocol {
private let viewModel: RoomDetailsScreenViewModelProtocol
@@ -46,15 +51,19 @@ final class SpaceSettingsScreenCoordinator: CoordinatorProtocol {
guard let self else { return }
switch action {
case .requestNotificationSettingsPresentation, .requestRecipientDetailsPresentation, .requestInvitePeoplePresentation, .leftRoom, .requestPollsHistoryPresentation, .requestRolesAndPermissionsPresentation, .startCall, .displayPinnedEventsTimeline, .displayMediaEventsTimeline, .displayKnockingRequests, .displayReportRoom:
case .requestNotificationSettingsPresentation, .requestRecipientDetailsPresentation, .requestInvitePeoplePresentation, .requestPollsHistoryPresentation,
.startCall, .displayPinnedEventsTimeline, .displayMediaEventsTimeline, .displayKnockingRequests,
.displayReportRoom, .transferOwnership:
break // Not handled in this context
case .requestEditDetailsPresentation:
break // TODO:
actionsSubject.send(.presentEditDetailsScreen)
case .displaySecurityAndPrivacy:
break // TODO:
case .transferOwnership:
break // TODO:
actionsSubject.send(.presentSecurityAndPrivacyScreen)
case .requestMemberDetailsPresentation:
actionsSubject.send(.presentMembersListScreen)
case .requestRolesAndPermissionsPresentation:
actionsSubject.send(.presentRolesAndPermissionsScreen)
case .leftRoom:
break // TODO:
}
}