From 509e658dbfcb2e07c49a5e1ec9ce07c6d63e2477 Mon Sep 17 00:00:00 2001 From: Florian Renaud Date: Fri, 10 Mar 2023 01:04:41 +0100 Subject: [PATCH] Prepare search request --- .../impl/root/CreateRoomRootPresenter.kt | 42 ++++++++++++++----- .../impl/root/CreateRoomRootState.kt | 2 +- .../impl/root/CreateRoomRootStateProvider.kt | 4 +- .../impl/root/CreateRoomRootView.kt | 3 +- 4 files changed, 37 insertions(+), 14 deletions(-) diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootPresenter.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootPresenter.kt index 987534d090..f3bf0f7664 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootPresenter.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootPresenter.kt @@ -17,43 +17,65 @@ package io.element.android.features.createroom.impl.root import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.MutableState import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember import androidx.compose.runtime.saveable.rememberSaveable import androidx.compose.runtime.setValue -import com.bumble.appyx.core.collections.immutableListOf import io.element.android.libraries.architecture.Presenter import io.element.android.libraries.matrix.api.core.MatrixPatterns import io.element.android.libraries.matrix.api.core.UserId 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 class CreateRoomRootPresenter @Inject constructor() : Presenter { @Composable override fun present(): CreateRoomRootState { - var searchQuery by rememberSaveable { mutableStateOf("") } - val searchResults = if (MatrixPatterns.isUserId(searchQuery)) { - immutableListOf(MatrixUser(UserId(searchQuery))) - } else { - immutableListOf() + val searchResults: MutableState> = remember { + mutableStateOf(persistentListOf()) } fun handleEvents(event: CreateRoomRootEvents) { when (event) { CreateRoomRootEvents.CreateRoom -> Unit // Todo Handle create room action CreateRoomRootEvents.InvitePeople -> Unit // Todo Handle invite people action - is CreateRoomRootEvents.UpdateSearchQuery -> { - searchQuery = event.query - } + is CreateRoomRootEvents.UpdateSearchQuery -> 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( eventSink = ::handleEvents, searchQuery = searchQuery, - searchResults = searchResults, + searchResults = searchResults.value, ) } + + private fun performSearch(query: String): ImmutableList { + val isMatrixId = MatrixPatterns.isUserId(query) + val results = mutableListOf()// 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() + } } diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootState.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootState.kt index d4d09ee0fc..eab793574a 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootState.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootState.kt @@ -16,8 +16,8 @@ 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 kotlinx.collections.immutable.ImmutableList // Do not use default value, so no member get forgotten in the presenters. data class CreateRoomRootState( diff --git a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootStateProvider.kt b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootStateProvider.kt index ea26edb7df..52913ae438 100644 --- a/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootStateProvider.kt +++ b/features/createroom/impl/src/main/kotlin/io/element/android/features/createroom/impl/root/CreateRoomRootStateProvider.kt @@ -17,9 +17,9 @@ package io.element.android.features.createroom.impl.root 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.ui.model.MatrixUser +import kotlinx.collections.immutable.persistentListOf open class CreateRoomRootStateProvider : PreviewParameterProvider { override val values: Sequence @@ -32,5 +32,5 @@ open class CreateRoomRootStateProvider : PreviewParameterProvider, + results: ImmutableList, active: Boolean, modifier: Modifier = Modifier, onActiveChanged: (Boolean) -> Unit = {},