Basic implementation of the UI, navigation wil be implemented in the next PR

This commit is contained in:
Mauro Romito
2025-10-29 18:59:45 +01:00
committed by Mauro
parent dfd757f2b6
commit b4f3e0c860
36 changed files with 250 additions and 135 deletions
@@ -45,5 +45,6 @@ enum SpaceScreenViewAction {
case toggleLeaveSpaceRoomDetails(id: String)
case confirmLeaveSpace
case spaceSettings
case rolesAndPermissions
case displayMembers(roomProxy: JoinedRoomProxyProtocol)
}
@@ -76,19 +76,7 @@ class SpaceScreenViewModel: SpaceScreenViewModelType, SpaceScreenViewModelProtoc
}
appSettings.$spaceSettingsEnabled
.combineLatest(roomProxy.infoPublisher)
.sink { [weak self] isEnabled, info in
guard let self else { return }
guard isEnabled, let powerLevels = info.powerLevels else {
state.isSpaceManagementEnabled = false
return
}
state.isSpaceManagementEnabled = powerLevels.canOwnUserEditRolesAndPermissions() ||
powerLevels.canOwnUser(sendStateEvent: .roomName) ||
powerLevels.canOwnUser(sendStateEvent: .roomTopic) ||
powerLevels.canOwnUser(sendStateEvent: .roomAvatar)
}
.weakAssign(to: \.state.isSpaceManagementEnabled, on: self)
.store(in: &cancellables)
}
}
@@ -141,6 +129,8 @@ class SpaceScreenViewModel: SpaceScreenViewModelType, SpaceScreenViewModelProtoc
fatalError("Always available when the space settings button is tapped.")
}
actionsSubject.send(.displaySpaceSettings(roomProxy: roomProxy))
case .rolesAndPermissions:
break // Not implemented yet
}
}
@@ -99,9 +99,9 @@ struct LeaveSpaceView: View {
.buttonStyle(.compound(.primary))
} else if context.viewState.isSpaceManagementEnabled {
Button {
context.send(viewAction: .spaceSettings)
context.send(viewAction: .rolesAndPermissions)
} label: {
Label(L10n.actionGoToSettings, icon: \.settings)
Label(L10n.actionGoToRolesAndPermissions, icon: \.settings)
}
.buttonStyle(.compound(.primary))
}