Refactor AddRoomToSpaceSearchDataSource to use AssistedInject

This commit is contained in:
ganfra
2026-01-21 17:44:53 +01:00
parent ca1d98928d
commit 125178c36f
2 changed files with 19 additions and 4 deletions

View File

@@ -17,6 +17,7 @@ import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import dev.zacsweers.metro.Inject
import io.element.android.libraries.architecture.AsyncAction
@@ -38,9 +39,8 @@ import kotlinx.coroutines.launch
@Inject
class AddRoomToSpacePresenter(
private val spaceRoomList: SpaceRoomList,
private val dataSource: AddRoomToSpaceSearchDataSource,
private val spaceService: SpaceService,
@SessionCoroutineScope private val sessionCoroutineScope: CoroutineScope,
private val dataSourceFactory: AddRoomToSpaceSearchDataSource.Factory,
) : Presenter<AddRoomToSpaceState> {
@Composable
@@ -50,6 +50,9 @@ class AddRoomToSpacePresenter(
var isSearchActive by remember { mutableStateOf(false) }
val saveAction = remember { mutableStateOf<AsyncAction<Unit>>(AsyncAction.Uninitialized) }
val coroutineScope = rememberCoroutineScope()
val dataSource = remember { dataSourceFactory.create(coroutineScope) }
// Update search query in data source
LaunchedEffect(searchQuery) {
dataSource.setSearchQuery(searchQuery)
@@ -94,7 +97,7 @@ class AddRoomToSpacePresenter(
searchQuery = ""
}
AddRoomToSpaceEvent.Save -> {
sessionCoroutineScope.addRoomsToSpace(
coroutineScope.addRoomsToSpace(
selectedRooms = selectedRooms,
addAction = saveAction,
)

View File

@@ -8,6 +8,9 @@
package io.element.android.features.space.impl.addroom
import dev.zacsweers.metro.Assisted
import dev.zacsweers.metro.AssistedFactory
import dev.zacsweers.metro.AssistedInject
import dev.zacsweers.metro.Inject
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
import io.element.android.libraries.matrix.api.MatrixClient
@@ -25,6 +28,7 @@ import io.element.android.libraries.matrix.ui.model.SelectRoomInfo
import io.element.android.libraries.matrix.ui.model.toSelectRoomInfo
import kotlinx.collections.immutable.ImmutableList
import kotlinx.collections.immutable.toImmutableList
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.coroutineScope
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.combine
@@ -40,17 +44,25 @@ private const val MAX_SUGGESTIONS_COUNT = 5
* DataSource for rooms that can be added to a space.
* Filters out DMs, spaces, rooms already in the space, and only includes rooms the user has joined.
*/
@Inject
@AssistedInject
class AddRoomToSpaceSearchDataSource(
@Assisted coroutineScope: CoroutineScope,
roomListService: RoomListService,
spaceRoomList: SpaceRoomList,
private val matrixClient: MatrixClient,
private val coroutineDispatchers: CoroutineDispatchers,
) {
@AssistedFactory
interface Factory {
fun create(coroutineScope: CoroutineScope): AddRoomToSpaceSearchDataSource
}
private val roomList = roomListService.createRoomList(
pageSize = PAGE_SIZE,
initialFilter = RoomListFilter.all(),
source = RoomList.Source.All,
coroutineScope = coroutineScope,
)
private val spaceChildrenFlow = spaceRoomList.spaceRoomsFlow.map { spaceChildren ->