feature (space) : iterate on space list (and space screen)
This commit is contained in:
parent
4048bb7fb6
commit
b45a4c3b2c
11 changed files with 79 additions and 44 deletions
|
|
@ -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) {
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -132,7 +132,6 @@ private fun SpaceViewTopBar(
|
|||
},
|
||||
actions = {
|
||||
},
|
||||
windowInsets = WindowInsets(0.dp)
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue