Space Settings UI tweaks (#4678)

* design tweaks for the space settings flow

* pr suggestions

* update proj
This commit is contained in:
Mauro
2025-10-31 12:52:56 +01:00
committed by GitHub
parent 010500a083
commit dc9ab56972
37 changed files with 187 additions and 40 deletions
@@ -28,7 +28,12 @@ struct SpaceScreenViewState: BindableState {
var selectedSpaceRoomID: String?
var joiningRoomIDs: Set<String> = []
var isSpaceManagementEnabled = false
var canEditBaseInfo = false
var canEditRolesAndPermissions = false
var isSpaceManagementEnabled: Bool {
canEditBaseInfo || canEditRolesAndPermissions
}
var bindings = SpaceScreenViewStateBindings()
}
@@ -80,7 +80,17 @@ class SpaceScreenViewModel: SpaceScreenViewModelType, SpaceScreenViewModelProtoc
}
appSettings.$spaceSettingsEnabled
.weakAssign(to: \.state.isSpaceManagementEnabled, on: self)
.combineLatest(roomProxy.infoPublisher)
.sink { [weak self] isEnabled, roomInfo in
guard let self else { return }
guard isEnabled, let powerLevels = roomInfo.powerLevels else {
state.canEditBaseInfo = false
state.canEditRolesAndPermissions = false
return
}
state.canEditBaseInfo = powerLevels.canOwnUserEditBaseInfo()
state.canEditRolesAndPermissions = powerLevels.canOwnUserEditRolesAndPermissions()
}
.store(in: &cancellables)
}
}
@@ -97,7 +97,7 @@ struct LeaveSpaceView: View {
Label(leaveHandle.confirmationTitle, icon: \.leave)
}
.buttonStyle(.compound(.primary))
} else if context.viewState.isSpaceManagementEnabled {
} else if context.viewState.canEditRolesAndPermissions {
Button {
context.send(viewAction: .rolesAndPermissions)
} label: {
@@ -114,6 +114,7 @@ struct SpaceScreen_Previews: PreviewProvider, TestablePreview {
joinedMembersCount: 76,
heroes: [.mockDan, .mockBob, .mockCharlie, .mockVerbose],
topic: "Description of the space goes right here. Lorem ipsum dolor sit amet consectetur. Leo viverra morbi habitant in.",
canonicalAlias: "#engineering-team:element.io",
joinRule: .knockRestricted(rules: [.roomMembership(roomId: "")])))
let spaceRoomListProxy = SpaceRoomListProxyMock(.init(spaceRoomProxy: spaceRoomProxy,
initialSpaceRooms: .mockSpaceList))