Refactor AddRoomToSpaceSearchDataSource to use AssistedInject
This commit is contained in:
@@ -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,
|
||||
)
|
||||
|
||||
@@ -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 ->
|
||||
|
||||
Reference in New Issue
Block a user