misc(navigation) : add onDetailsClick on SpaceView

This commit is contained in:
ganfra 2025-10-27 09:53:09 +01:00
parent 06c26582f2
commit 2949dfb426
5 changed files with 23 additions and 0 deletions

View file

@ -166,6 +166,9 @@ class JoinedRoomLoadedFlowNode(
callbacks.forEach { it.onOpenRoom(roomId, viaParameters) } callbacks.forEach { it.onOpenRoom(roomId, viaParameters) }
} }
override fun onOpenDetails() {
backstack.push(NavTarget.RoomDetails)
}
} }
return spaceEntryPoint.nodeBuilder(this, buildContext) return spaceEntryPoint.nodeBuilder(this, buildContext)
.inputs(SpaceEntryPoint.Inputs(roomId = inputs.room.roomId)) .inputs(SpaceEntryPoint.Inputs(roomId = inputs.room.roomId))

View file

@ -32,5 +32,6 @@ interface SpaceEntryPoint : FeatureEntryPoint {
interface Callback : Plugin { interface Callback : Plugin {
fun onOpenRoom(roomId: RoomId, viaParameters: List<String>) fun onOpenRoom(roomId: RoomId, viaParameters: List<String>)
fun onOpenDetails()
} }
} }

View file

@ -84,6 +84,10 @@ class SpaceFlowNode(
callback.onOpenRoom(roomId, viaParameters) callback.onOpenRoom(roomId, viaParameters)
} }
override fun onOpenDetails() {
callback.onOpenDetails()
}
override fun onLeaveSpace() { override fun onLeaveSpace() {
backstack.push(NavTarget.Leave) backstack.push(NavTarget.Leave)
} }

View file

@ -41,6 +41,7 @@ class SpaceNode(
) : Node(buildContext, plugins = plugins) { ) : Node(buildContext, plugins = plugins) {
interface Callback : Plugin { interface Callback : Plugin {
fun onOpenRoom(roomId: RoomId, viaParameters: List<String>) fun onOpenRoom(roomId: RoomId, viaParameters: List<String>)
fun onOpenDetails()
fun onLeaveSpace() fun onLeaveSpace()
} }
@ -76,6 +77,9 @@ class SpaceNode(
onRoomClick = { spaceRoom -> onRoomClick = { spaceRoom ->
callback.onOpenRoom(spaceRoom.roomId, spaceRoom.via) callback.onOpenRoom(spaceRoom.roomId, spaceRoom.via)
}, },
onDetailsClick = {
callback.onOpenDetails()
},
onShareSpace = { onShareSpace = {
onShareRoom(context) onShareRoom(context)
}, },

View file

@ -14,6 +14,7 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect import androidx.compose.runtime.LaunchedEffect
@ -24,6 +25,7 @@ import androidx.compose.runtime.rememberUpdatedState
import androidx.compose.runtime.setValue import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.res.stringResource import androidx.compose.ui.res.stringResource
import androidx.compose.ui.semantics.heading import androidx.compose.ui.semantics.heading
import androidx.compose.ui.semantics.semantics import androidx.compose.ui.semantics.semantics
@ -73,6 +75,7 @@ fun SpaceView(
onRoomClick: (spaceRoom: SpaceRoom) -> Unit, onRoomClick: (spaceRoom: SpaceRoom) -> Unit,
onShareSpace: () -> Unit, onShareSpace: () -> Unit,
onLeaveSpaceClick: () -> Unit, onLeaveSpaceClick: () -> Unit,
onDetailsClick: () -> Unit,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
acceptDeclineInviteView: @Composable () -> Unit, acceptDeclineInviteView: @Composable () -> Unit,
) { ) {
@ -84,6 +87,7 @@ fun SpaceView(
onBackClick = onBackClick, onBackClick = onBackClick,
onLeaveSpaceClick = onLeaveSpaceClick, onLeaveSpaceClick = onLeaveSpaceClick,
onShareSpace = onShareSpace, onShareSpace = onShareSpace,
onDetailsClick = onDetailsClick
) )
}, },
content = { padding -> content = { padding ->
@ -244,6 +248,7 @@ private fun SpaceViewTopBar(
currentSpace: SpaceRoom?, currentSpace: SpaceRoom?,
onBackClick: () -> Unit, onBackClick: () -> Unit,
onLeaveSpaceClick: () -> Unit, onLeaveSpaceClick: () -> Unit,
onDetailsClick: () -> Unit,
onShareSpace: () -> Unit, onShareSpace: () -> Unit,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
) { ) {
@ -254,9 +259,14 @@ private fun SpaceViewTopBar(
}, },
title = { title = {
if (currentSpace != null) { if (currentSpace != null) {
val roundedCornerShape = RoundedCornerShape(8.dp)
SpaceAvatarAndNameRow( SpaceAvatarAndNameRow(
name = currentSpace.displayName, name = currentSpace.displayName,
avatarData = currentSpace.getAvatarData(AvatarSize.TimelineRoom), avatarData = currentSpace.getAvatarData(AvatarSize.TimelineRoom),
modifier = Modifier
.clip(roundedCornerShape)
// TODO enable when screen ready for space
// .clickable(onClick = onDetailsClick)
) )
} }
}, },
@ -386,6 +396,7 @@ internal fun SpaceViewPreview(
onShareSpace = {}, onShareSpace = {},
onLeaveSpaceClick = {}, onLeaveSpaceClick = {},
acceptDeclineInviteView = {}, acceptDeclineInviteView = {},
onDetailsClick = {},
onBackClick = {}, onBackClick = {},
) )
} }