mirror of
https://github.com/Novaloop-AG/element-x-android.git
synced 2026-11-02 21:05:28 +00:00
Refactor AddRoomToSpaceSearchDataSource to use AssistedInject
This commit is contained in:
+6
-3
@@ -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,
|
||||||
)
|
)
|
||||||
|
|||||||
+13
-1
@@ -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 ->
|
||||||
|
|||||||
Reference in New Issue
Block a user