Prepare search request
This commit is contained in:
parent
33890aca70
commit
f9ca38745c
4 changed files with 37 additions and 14 deletions
|
|
@ -17,43 +17,65 @@
|
||||||
package io.element.android.features.createroom.impl.root
|
package io.element.android.features.createroom.impl.root
|
||||||
|
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.runtime.LaunchedEffect
|
||||||
|
import androidx.compose.runtime.MutableState
|
||||||
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.saveable.rememberSaveable
|
import androidx.compose.runtime.saveable.rememberSaveable
|
||||||
import androidx.compose.runtime.setValue
|
import androidx.compose.runtime.setValue
|
||||||
import com.bumble.appyx.core.collections.immutableListOf
|
|
||||||
import io.element.android.libraries.architecture.Presenter
|
import io.element.android.libraries.architecture.Presenter
|
||||||
import io.element.android.libraries.matrix.api.core.MatrixPatterns
|
import io.element.android.libraries.matrix.api.core.MatrixPatterns
|
||||||
import io.element.android.libraries.matrix.api.core.UserId
|
import io.element.android.libraries.matrix.api.core.UserId
|
||||||
import io.element.android.libraries.matrix.ui.model.MatrixUser
|
import io.element.android.libraries.matrix.ui.model.MatrixUser
|
||||||
|
import kotlinx.collections.immutable.ImmutableList
|
||||||
|
import kotlinx.collections.immutable.persistentListOf
|
||||||
|
import kotlinx.collections.immutable.toImmutableList
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
|
|
||||||
class CreateRoomRootPresenter @Inject constructor() : Presenter<CreateRoomRootState> {
|
class CreateRoomRootPresenter @Inject constructor() : Presenter<CreateRoomRootState> {
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
override fun present(): CreateRoomRootState {
|
override fun present(): CreateRoomRootState {
|
||||||
|
|
||||||
var searchQuery by rememberSaveable { mutableStateOf("") }
|
var searchQuery by rememberSaveable { mutableStateOf("") }
|
||||||
val searchResults = if (MatrixPatterns.isUserId(searchQuery)) {
|
val searchResults: MutableState<ImmutableList<MatrixUser>> = remember {
|
||||||
immutableListOf(MatrixUser(UserId(searchQuery)))
|
mutableStateOf(persistentListOf())
|
||||||
} else {
|
|
||||||
immutableListOf()
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fun handleEvents(event: CreateRoomRootEvents) {
|
fun handleEvents(event: CreateRoomRootEvents) {
|
||||||
when (event) {
|
when (event) {
|
||||||
CreateRoomRootEvents.CreateRoom -> Unit // Todo Handle create room action
|
CreateRoomRootEvents.CreateRoom -> Unit // Todo Handle create room action
|
||||||
CreateRoomRootEvents.InvitePeople -> Unit // Todo Handle invite people action
|
CreateRoomRootEvents.InvitePeople -> Unit // Todo Handle invite people action
|
||||||
is CreateRoomRootEvents.UpdateSearchQuery -> {
|
is CreateRoomRootEvents.UpdateSearchQuery -> searchQuery = event.query
|
||||||
searchQuery = event.query
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LaunchedEffect(searchQuery) {
|
||||||
|
searchResults.value = if (MatrixPatterns.isUserId(searchQuery)) {
|
||||||
|
persistentListOf(MatrixUser(UserId(searchQuery)))
|
||||||
|
} else {
|
||||||
|
persistentListOf()
|
||||||
|
}
|
||||||
|
if (searchQuery.isNotEmpty()) {
|
||||||
|
searchResults.value = performSearch(searchQuery)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return CreateRoomRootState(
|
return CreateRoomRootState(
|
||||||
eventSink = ::handleEvents,
|
eventSink = ::handleEvents,
|
||||||
searchQuery = searchQuery,
|
searchQuery = searchQuery,
|
||||||
searchResults = searchResults,
|
searchResults = searchResults.value,
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private fun performSearch(query: String): ImmutableList<MatrixUser> {
|
||||||
|
val isMatrixId = MatrixPatterns.isUserId(query)
|
||||||
|
val results = mutableListOf<MatrixUser>()// TODO trigger /search request
|
||||||
|
if (isMatrixId && results.none { it.id.value == query }) {
|
||||||
|
val getProfileResult: MatrixUser? = null // TODO trigger /profile quest
|
||||||
|
val profile = getProfileResult ?: MatrixUser(UserId(query))
|
||||||
|
results.add(0, profile)
|
||||||
|
}
|
||||||
|
return results.toImmutableList()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,8 +16,8 @@
|
||||||
|
|
||||||
package io.element.android.features.createroom.impl.root
|
package io.element.android.features.createroom.impl.root
|
||||||
|
|
||||||
import com.bumble.appyx.core.collections.ImmutableList
|
|
||||||
import io.element.android.libraries.matrix.ui.model.MatrixUser
|
import io.element.android.libraries.matrix.ui.model.MatrixUser
|
||||||
|
import kotlinx.collections.immutable.ImmutableList
|
||||||
|
|
||||||
// Do not use default value, so no member get forgotten in the presenters.
|
// Do not use default value, so no member get forgotten in the presenters.
|
||||||
data class CreateRoomRootState(
|
data class CreateRoomRootState(
|
||||||
|
|
|
||||||
|
|
@ -17,9 +17,9 @@
|
||||||
package io.element.android.features.createroom.impl.root
|
package io.element.android.features.createroom.impl.root
|
||||||
|
|
||||||
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
|
||||||
import com.bumble.appyx.core.collections.immutableListOf
|
|
||||||
import io.element.android.libraries.matrix.api.core.UserId
|
import io.element.android.libraries.matrix.api.core.UserId
|
||||||
import io.element.android.libraries.matrix.ui.model.MatrixUser
|
import io.element.android.libraries.matrix.ui.model.MatrixUser
|
||||||
|
import kotlinx.collections.immutable.persistentListOf
|
||||||
|
|
||||||
open class CreateRoomRootStateProvider : PreviewParameterProvider<CreateRoomRootState> {
|
open class CreateRoomRootStateProvider : PreviewParameterProvider<CreateRoomRootState> {
|
||||||
override val values: Sequence<CreateRoomRootState>
|
override val values: Sequence<CreateRoomRootState>
|
||||||
|
|
@ -32,5 +32,5 @@ open class CreateRoomRootStateProvider : PreviewParameterProvider<CreateRoomRoot
|
||||||
fun aCreateRoomRootState() = CreateRoomRootState(
|
fun aCreateRoomRootState() = CreateRoomRootState(
|
||||||
eventSink = {},
|
eventSink = {},
|
||||||
searchQuery = "@someone:example.org",
|
searchQuery = "@someone:example.org",
|
||||||
searchResults = immutableListOf(MatrixUser(UserId("@someone:example.org"))),
|
searchResults = persistentListOf(MatrixUser(UserId("@someone:example.org"))),
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -57,6 +57,7 @@ import io.element.android.libraries.designsystem.theme.components.Scaffold
|
||||||
import io.element.android.libraries.designsystem.theme.components.Text
|
import io.element.android.libraries.designsystem.theme.components.Text
|
||||||
import io.element.android.libraries.matrix.ui.components.MatrixUserRow
|
import io.element.android.libraries.matrix.ui.components.MatrixUserRow
|
||||||
import io.element.android.libraries.matrix.ui.model.MatrixUser
|
import io.element.android.libraries.matrix.ui.model.MatrixUser
|
||||||
|
import kotlinx.collections.immutable.ImmutableList
|
||||||
import io.element.android.libraries.designsystem.R as DrawableR
|
import io.element.android.libraries.designsystem.R as DrawableR
|
||||||
import io.element.android.libraries.ui.strings.R as StringR
|
import io.element.android.libraries.ui.strings.R as StringR
|
||||||
|
|
||||||
|
|
@ -128,7 +129,7 @@ fun CreateRoomRootViewTopBar(
|
||||||
fun CreateRoomSearchBar(
|
fun CreateRoomSearchBar(
|
||||||
query: String,
|
query: String,
|
||||||
placeHolderTitle: String,
|
placeHolderTitle: String,
|
||||||
results: List<MatrixUser>,
|
results: ImmutableList<MatrixUser>,
|
||||||
active: Boolean,
|
active: Boolean,
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
onActiveChanged: (Boolean) -> Unit = {},
|
onActiveChanged: (Boolean) -> Unit = {},
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue