diff --git a/ElementX/Sources/Screens/Spaces/SpaceScreen/SpaceScreenModels.swift b/ElementX/Sources/Screens/Spaces/SpaceScreen/SpaceScreenModels.swift index 13c91bdd4..423bdaf3c 100644 --- a/ElementX/Sources/Screens/Spaces/SpaceScreen/SpaceScreenModels.swift +++ b/ElementX/Sources/Screens/Spaces/SpaceScreen/SpaceScreenModels.swift @@ -31,9 +31,10 @@ struct SpaceScreenViewState: BindableState { var canEditBaseInfo = false var canEditRolesAndPermissions = false + var canEditSecurityAndPrivacy = false var isSpaceManagementEnabled: Bool { - canEditBaseInfo || canEditRolesAndPermissions + canEditBaseInfo || canEditRolesAndPermissions || canEditSecurityAndPrivacy } var bindings = SpaceScreenViewStateBindings() diff --git a/ElementX/Sources/Screens/Spaces/SpaceScreen/SpaceScreenViewModel.swift b/ElementX/Sources/Screens/Spaces/SpaceScreen/SpaceScreenViewModel.swift index 5f25dad03..30545eb3e 100644 --- a/ElementX/Sources/Screens/Spaces/SpaceScreen/SpaceScreenViewModel.swift +++ b/ElementX/Sources/Screens/Spaces/SpaceScreen/SpaceScreenViewModel.swift @@ -88,10 +88,13 @@ class SpaceScreenViewModel: SpaceScreenViewModelType, SpaceScreenViewModelProtoc guard isEnabled, let powerLevels = roomInfo.powerLevels else { state.canEditBaseInfo = false state.canEditRolesAndPermissions = false + state.canEditSecurityAndPrivacy = false return } state.canEditBaseInfo = powerLevels.canOwnUserEditBaseInfo() state.canEditRolesAndPermissions = powerLevels.canOwnUserEditRolesAndPermissions() + state.canEditSecurityAndPrivacy = powerLevels.canOwnUserEditSecurityAndPrivacy(isSpace: roomInfo.isSpace, + joinRule: roomInfo.joinRule) } .store(in: &cancellables) } diff --git a/ElementX/Sources/Screens/Spaces/SpaceScreen/View/SpaceScreen.swift b/ElementX/Sources/Screens/Spaces/SpaceScreen/View/SpaceScreen.swift index 04ec4bafa..50eb87478 100644 --- a/ElementX/Sources/Screens/Spaces/SpaceScreen/View/SpaceScreen.swift +++ b/ElementX/Sources/Screens/Spaces/SpaceScreen/View/SpaceScreen.swift @@ -55,6 +55,13 @@ struct SpaceScreen: View { RoomHeaderView(roomName: context.viewState.space.name, roomAvatar: context.viewState.space.avatar, mediaProvider: context.mediaProvider) + .contentShape(.rect) + .onTapGesture { + if context.viewState.isSpaceManagementEnabled, + let roomProxy = context.viewState.roomProxy { + context.send(viewAction: .spaceSettings(roomProxy: roomProxy)) + } + } } // This should really use a ToolbarItemGroup(placement: .secondaryAction), however it