Roomlist: Extract State and Events
This commit is contained in:
@@ -6,7 +6,7 @@ import androidx.compose.runtime.getValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import com.bumble.appyx.core.modality.BuildContext
|
||||
import com.bumble.appyx.core.node.Node
|
||||
import io.element.android.x.features.roomlist.model.RoomListScreen
|
||||
import io.element.android.x.features.roomlist.model.RoomListEvents
|
||||
import io.element.android.x.matrix.core.RoomId
|
||||
|
||||
class RoomListNode(
|
||||
@@ -18,15 +18,15 @@ class RoomListNode(
|
||||
private val connector = presenterConnector(presenter)
|
||||
|
||||
private fun updateFilter(filter: String) {
|
||||
connector.emitEvent(RoomListScreen.Event.UpdateFilter(filter))
|
||||
connector.emitEvent(RoomListEvents.UpdateFilter(filter))
|
||||
}
|
||||
|
||||
private fun updateVisibleRange(range: IntRange) {
|
||||
connector.emitEvent((RoomListScreen.Event.UpdateVisibleRange(range)))
|
||||
connector.emitEvent((RoomListEvents.UpdateVisibleRange(range)))
|
||||
}
|
||||
|
||||
private fun logout() {
|
||||
connector.emitEvent(RoomListScreen.Event.Logout)
|
||||
connector.emitEvent(RoomListEvents.Logout)
|
||||
}
|
||||
|
||||
@Composable
|
||||
|
||||
@@ -14,9 +14,10 @@ import io.element.android.x.core.coroutine.parallelMap
|
||||
import io.element.android.x.designsystem.components.avatar.AvatarData
|
||||
import io.element.android.x.designsystem.components.avatar.AvatarSize
|
||||
import io.element.android.x.features.roomlist.model.MatrixUser
|
||||
import io.element.android.x.features.roomlist.model.RoomListEvents
|
||||
import io.element.android.x.features.roomlist.model.RoomListRoomSummary
|
||||
import io.element.android.x.features.roomlist.model.RoomListRoomSummaryPlaceholders
|
||||
import io.element.android.x.features.roomlist.model.RoomListScreen
|
||||
import io.element.android.x.features.roomlist.model.RoomListState
|
||||
import io.element.android.x.matrix.MatrixClient
|
||||
import io.element.android.x.matrix.media.MediaResolver
|
||||
import io.element.android.x.matrix.room.RoomSummary
|
||||
@@ -32,10 +33,10 @@ private const val extendedRangeSize = 40
|
||||
class RoomListPresenter @Inject constructor(
|
||||
private val client: MatrixClient,
|
||||
private val lastMessageFormatter: LastMessageFormatter = LastMessageFormatter(),
|
||||
) : Presenter<RoomListScreen.State, RoomListScreen.Event> {
|
||||
) : Presenter<RoomListState, RoomListEvents> {
|
||||
|
||||
@Composable
|
||||
override fun present(events: Flow<RoomListScreen.Event>): RoomListScreen.State {
|
||||
override fun present(events: Flow<RoomListEvents>): RoomListState {
|
||||
val matrixUser: MutableState<MatrixUser?> = remember {
|
||||
mutableStateOf(null)
|
||||
}
|
||||
@@ -53,16 +54,16 @@ class RoomListPresenter @Inject constructor(
|
||||
initialLoad(matrixUser)
|
||||
events.collect { event ->
|
||||
when (event) {
|
||||
RoomListScreen.Event.Logout -> logout(isLoginOut)
|
||||
is RoomListScreen.Event.UpdateFilter -> filter = event.newFilter
|
||||
is RoomListScreen.Event.UpdateVisibleRange -> updateVisibleRange(event.range)
|
||||
RoomListEvents.Logout -> logout(isLoginOut)
|
||||
is RoomListEvents.UpdateFilter -> filter = event.newFilter
|
||||
is RoomListEvents.UpdateVisibleRange -> updateVisibleRange(event.range)
|
||||
}
|
||||
}
|
||||
}
|
||||
LaunchedEffect(roomSummaries, filter) {
|
||||
filteredRoomSummaries.value = updateFilteredRoomSummaries(roomSummaries, filter)
|
||||
}
|
||||
return RoomListScreen.State(
|
||||
return RoomListState(
|
||||
matrixUser = matrixUser.value,
|
||||
roomList = filteredRoomSummaries.value,
|
||||
filter = filter,
|
||||
|
||||
@@ -28,14 +28,14 @@ import io.element.android.x.features.roomlist.components.RoomListTopBar
|
||||
import io.element.android.x.features.roomlist.components.RoomSummaryRow
|
||||
import io.element.android.x.features.roomlist.model.MatrixUser
|
||||
import io.element.android.x.features.roomlist.model.RoomListRoomSummary
|
||||
import io.element.android.x.features.roomlist.model.RoomListScreen
|
||||
import io.element.android.x.features.roomlist.model.RoomListState
|
||||
import io.element.android.x.features.roomlist.model.stubbedRoomSummaries
|
||||
import io.element.android.x.matrix.core.RoomId
|
||||
import kotlinx.collections.immutable.ImmutableList
|
||||
|
||||
@Composable
|
||||
fun RoomListView(
|
||||
state: RoomListScreen.State,
|
||||
state: RoomListState,
|
||||
modifier: Modifier = Modifier,
|
||||
onRoomClicked: (RoomId) -> Unit = {},
|
||||
onFilterChanged: (String) -> Unit = {},
|
||||
|
||||
@@ -0,0 +1,7 @@
|
||||
package io.element.android.x.features.roomlist.model
|
||||
|
||||
sealed interface RoomListEvents {
|
||||
object Logout : RoomListEvents
|
||||
data class UpdateFilter(val newFilter: String) : RoomListEvents
|
||||
data class UpdateVisibleRange(val range: IntRange): RoomListEvents
|
||||
}
|
||||
@@ -1,21 +0,0 @@
|
||||
package io.element.android.x.features.roomlist.model
|
||||
|
||||
import androidx.compose.runtime.Stable
|
||||
import kotlinx.collections.immutable.ImmutableList
|
||||
|
||||
object RoomListScreen {
|
||||
|
||||
@Stable
|
||||
data class State(
|
||||
val matrixUser: MatrixUser?,
|
||||
val roomList: ImmutableList<RoomListRoomSummary>,
|
||||
val filter: String,
|
||||
val isLoginOut: Boolean,
|
||||
)
|
||||
|
||||
sealed interface Event {
|
||||
object Logout : Event
|
||||
data class UpdateFilter(val newFilter: String) : Event
|
||||
data class UpdateVisibleRange(val range: IntRange): Event
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
package io.element.android.x.features.roomlist.model
|
||||
|
||||
import androidx.compose.runtime.Stable
|
||||
import kotlinx.collections.immutable.ImmutableList
|
||||
|
||||
@Stable
|
||||
data class RoomListState(
|
||||
val matrixUser: MatrixUser?,
|
||||
val roomList: ImmutableList<RoomListRoomSummary>,
|
||||
val filter: String,
|
||||
val isLoginOut: Boolean,
|
||||
)
|
||||
Reference in New Issue
Block a user