From a53aae132d91bb04aadd081d25d94dc306dbea5e Mon Sep 17 00:00:00 2001 From: ganfra Date: Wed, 4 Jan 2023 11:36:32 +0100 Subject: [PATCH] Roomlist: Extract State and Events --- .../x/features/roomlist/RoomListNode.kt | 8 +++---- .../x/features/roomlist/RoomListPresenter.kt | 15 ++++++------- .../x/features/roomlist/RoomListView.kt | 4 ++-- .../features/roomlist/model/RoomListEvents.kt | 7 +++++++ .../features/roomlist/model/RoomListScreen.kt | 21 ------------------- .../features/roomlist/model/RoomListState.kt | 12 +++++++++++ 6 files changed, 33 insertions(+), 34 deletions(-) create mode 100644 features/roomlist/src/main/java/io/element/android/x/features/roomlist/model/RoomListEvents.kt delete mode 100644 features/roomlist/src/main/java/io/element/android/x/features/roomlist/model/RoomListScreen.kt create mode 100644 features/roomlist/src/main/java/io/element/android/x/features/roomlist/model/RoomListState.kt diff --git a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/RoomListNode.kt b/features/roomlist/src/main/java/io/element/android/x/features/roomlist/RoomListNode.kt index 48b5cfd6eb..d91b962476 100644 --- a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/RoomListNode.kt +++ b/features/roomlist/src/main/java/io/element/android/x/features/roomlist/RoomListNode.kt @@ -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 diff --git a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/RoomListPresenter.kt b/features/roomlist/src/main/java/io/element/android/x/features/roomlist/RoomListPresenter.kt index e4f52dce3f..a13f6fcd4b 100644 --- a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/RoomListPresenter.kt +++ b/features/roomlist/src/main/java/io/element/android/x/features/roomlist/RoomListPresenter.kt @@ -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 { +) : Presenter { @Composable - override fun present(events: Flow): RoomListScreen.State { + override fun present(events: Flow): RoomListState { val matrixUser: MutableState = 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, diff --git a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/RoomListView.kt b/features/roomlist/src/main/java/io/element/android/x/features/roomlist/RoomListView.kt index e6a8e0e5fa..8b860e0d66 100644 --- a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/RoomListView.kt +++ b/features/roomlist/src/main/java/io/element/android/x/features/roomlist/RoomListView.kt @@ -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 = {}, diff --git a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/model/RoomListEvents.kt b/features/roomlist/src/main/java/io/element/android/x/features/roomlist/model/RoomListEvents.kt new file mode 100644 index 0000000000..ff8b80decf --- /dev/null +++ b/features/roomlist/src/main/java/io/element/android/x/features/roomlist/model/RoomListEvents.kt @@ -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 +} diff --git a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/model/RoomListScreen.kt b/features/roomlist/src/main/java/io/element/android/x/features/roomlist/model/RoomListScreen.kt deleted file mode 100644 index 1db974bd7b..0000000000 --- a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/model/RoomListScreen.kt +++ /dev/null @@ -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, - 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 - } -} diff --git a/features/roomlist/src/main/java/io/element/android/x/features/roomlist/model/RoomListState.kt b/features/roomlist/src/main/java/io/element/android/x/features/roomlist/model/RoomListState.kt new file mode 100644 index 0000000000..a71b2535c1 --- /dev/null +++ b/features/roomlist/src/main/java/io/element/android/x/features/roomlist/model/RoomListState.kt @@ -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, + val filter: String, + val isLoginOut: Boolean, +)