feature (space) : iterate on space list (and space screen)

This commit is contained in:
ganfra 2025-09-08 21:57:25 +02:00 committed by Benoit Marty
parent 4048bb7fb6
commit b45a4c3b2c
11 changed files with 79 additions and 44 deletions

View file

@ -22,10 +22,11 @@ import io.element.android.libraries.di.SessionScope
class SpaceNode @AssistedInject constructor(
@Assisted buildContext: BuildContext,
@Assisted plugins: List<Plugin>,
private val presenter: SpacePresenter,
private val presenterFactory: SpacePresenter.Factory,
) : Node(buildContext, plugins = plugins) {
val params = plugins.filterIsInstance<SpaceEntryPoint.Params>().single()
private val presenter = presenterFactory.create(params)
@Composable
override fun View(modifier: Modifier) {

View file

@ -11,22 +11,33 @@ import androidx.compose.runtime.Composable
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import dev.zacsweers.metro.Assisted
import dev.zacsweers.metro.AssistedFactory
import dev.zacsweers.metro.Inject
import io.element.android.features.invite.api.SeenInvitesStore
import io.element.android.features.space.api.SpaceEntryPoint
import io.element.android.libraries.architecture.Presenter
import io.element.android.libraries.core.coroutine.mapState
import io.element.android.libraries.matrix.api.MatrixClient
import kotlinx.collections.immutable.persistentListOf
import kotlinx.collections.immutable.persistentSetOf
import kotlinx.collections.immutable.toPersistentList
import kotlinx.collections.immutable.toPersistentSet
import kotlinx.coroutines.flow.map
import javax.inject.Inject
class SpacePresenter @Inject constructor(
@Inject
class SpacePresenter(
@Assisted private val params: SpaceEntryPoint.Params,
private val client: MatrixClient,
private val seenInvitesStore: SeenInvitesStore,
) : Presenter<SpaceState> {
@AssistedFactory
interface Factory {
fun create(params: SpaceEntryPoint.Params): SpacePresenter
}
private val spaceRoomList = client.spaceService.spaceRoomList(params.roomId())
@Composable
override fun present(): SpaceState {
val hideInvitesAvatar by remember {
@ -35,18 +46,19 @@ class SpacePresenter @Inject constructor(
.mediaPreviewConfigFlow
.mapState { config -> config.hideInviteAvatar }
}.collectAsState()
val spaceRooms by client.spaceService.spaceRoomsFlow.collectAsState(emptyList())
val seenSpaceInvites by remember {
seenInvitesStore.seenRoomIds().map { it.toPersistentSet() }
}.collectAsState(persistentSetOf())
val children by spaceRoomList.spaceRoomsFlow.collectAsState(emptyList())
fun handleEvents(event: SpaceEvents) {
//when (event) { }
}
return SpaceState(
parentSpace = null,
children = spaceRooms.toPersistentList(),
children = children.toPersistentList(),
seenSpaceInvites = seenSpaceInvites,
hideInvitesAvatar = hideInvitesAvatar,
eventSink = ::handleEvents,

View file

@ -132,7 +132,6 @@ private fun SpaceViewTopBar(
},
actions = {
},
windowInsets = WindowInsets(0.dp)
)
}