Refactor AddRoomToSpaceSearchDataSource to use AssistedInject
This commit is contained in:
parent
ca1d98928d
commit
125178c36f
2 changed files with 19 additions and 4 deletions
|
|
@ -17,6 +17,7 @@ import androidx.compose.runtime.derivedStateOf
|
||||||
import androidx.compose.runtime.getValue
|
import androidx.compose.runtime.getValue
|
||||||
import androidx.compose.runtime.mutableStateOf
|
import androidx.compose.runtime.mutableStateOf
|
||||||
import androidx.compose.runtime.remember
|
import androidx.compose.runtime.remember
|
||||||
|
import androidx.compose.runtime.rememberCoroutineScope
|
||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
import dev.zacsweers.metro.Inject
|
import dev.zacsweers.metro.Inject
|
||||||
import io.element.android.libraries.architecture.AsyncAction
|
import io.element.android.libraries.architecture.AsyncAction
|
||||||
|
|
@ -38,9 +39,8 @@ import kotlinx.coroutines.launch
|
||||||
@Inject
|
@Inject
|
||||||
class AddRoomToSpacePresenter(
|
class AddRoomToSpacePresenter(
|
||||||
private val spaceRoomList: SpaceRoomList,
|
private val spaceRoomList: SpaceRoomList,
|
||||||
private val dataSource: AddRoomToSpaceSearchDataSource,
|
|
||||||
private val spaceService: SpaceService,
|
private val spaceService: SpaceService,
|
||||||
@SessionCoroutineScope private val sessionCoroutineScope: CoroutineScope,
|
private val dataSourceFactory: AddRoomToSpaceSearchDataSource.Factory,
|
||||||
) : Presenter<AddRoomToSpaceState> {
|
) : Presenter<AddRoomToSpaceState> {
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
|
|
@ -50,6 +50,9 @@ class AddRoomToSpacePresenter(
|
||||||
var isSearchActive by remember { mutableStateOf(false) }
|
var isSearchActive by remember { mutableStateOf(false) }
|
||||||
val saveAction = remember { mutableStateOf<AsyncAction<Unit>>(AsyncAction.Uninitialized) }
|
val saveAction = remember { mutableStateOf<AsyncAction<Unit>>(AsyncAction.Uninitialized) }
|
||||||
|
|
||||||
|
val coroutineScope = rememberCoroutineScope()
|
||||||
|
val dataSource = remember { dataSourceFactory.create(coroutineScope) }
|
||||||
|
|
||||||
// Update search query in data source
|
// Update search query in data source
|
||||||
LaunchedEffect(searchQuery) {
|
LaunchedEffect(searchQuery) {
|
||||||
dataSource.setSearchQuery(searchQuery)
|
dataSource.setSearchQuery(searchQuery)
|
||||||
|
|
@ -94,7 +97,7 @@ class AddRoomToSpacePresenter(
|
||||||
searchQuery = ""
|
searchQuery = ""
|
||||||
}
|
}
|
||||||
AddRoomToSpaceEvent.Save -> {
|
AddRoomToSpaceEvent.Save -> {
|
||||||
sessionCoroutineScope.addRoomsToSpace(
|
coroutineScope.addRoomsToSpace(
|
||||||
selectedRooms = selectedRooms,
|
selectedRooms = selectedRooms,
|
||||||
addAction = saveAction,
|
addAction = saveAction,
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -8,6 +8,9 @@
|
||||||
|
|
||||||
package io.element.android.features.space.impl.addroom
|
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 dev.zacsweers.metro.Inject
|
||||||
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
import io.element.android.libraries.core.coroutine.CoroutineDispatchers
|
||||||
import io.element.android.libraries.matrix.api.MatrixClient
|
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 io.element.android.libraries.matrix.ui.model.toSelectRoomInfo
|
||||||
import kotlinx.collections.immutable.ImmutableList
|
import kotlinx.collections.immutable.ImmutableList
|
||||||
import kotlinx.collections.immutable.toImmutableList
|
import kotlinx.collections.immutable.toImmutableList
|
||||||
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.coroutineScope
|
import kotlinx.coroutines.coroutineScope
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import kotlinx.coroutines.flow.combine
|
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.
|
* 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.
|
* Filters out DMs, spaces, rooms already in the space, and only includes rooms the user has joined.
|
||||||
*/
|
*/
|
||||||
@Inject
|
@AssistedInject
|
||||||
class AddRoomToSpaceSearchDataSource(
|
class AddRoomToSpaceSearchDataSource(
|
||||||
|
@Assisted coroutineScope: CoroutineScope,
|
||||||
roomListService: RoomListService,
|
roomListService: RoomListService,
|
||||||
spaceRoomList: SpaceRoomList,
|
spaceRoomList: SpaceRoomList,
|
||||||
private val matrixClient: MatrixClient,
|
private val matrixClient: MatrixClient,
|
||||||
private val coroutineDispatchers: CoroutineDispatchers,
|
private val coroutineDispatchers: CoroutineDispatchers,
|
||||||
) {
|
) {
|
||||||
|
|
||||||
|
@AssistedFactory
|
||||||
|
interface Factory {
|
||||||
|
fun create(coroutineScope: CoroutineScope): AddRoomToSpaceSearchDataSource
|
||||||
|
}
|
||||||
|
|
||||||
private val roomList = roomListService.createRoomList(
|
private val roomList = roomListService.createRoomList(
|
||||||
pageSize = PAGE_SIZE,
|
pageSize = PAGE_SIZE,
|
||||||
initialFilter = RoomListFilter.all(),
|
initialFilter = RoomListFilter.all(),
|
||||||
source = RoomList.Source.All,
|
source = RoomList.Source.All,
|
||||||
|
coroutineScope = coroutineScope,
|
||||||
)
|
)
|
||||||
|
|
||||||
private val spaceChildrenFlow = spaceRoomList.spaceRoomsFlow.map { spaceChildren ->
|
private val spaceChildrenFlow = spaceRoomList.spaceRoomsFlow.map { spaceChildren ->
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue