Rename SearchBarResultState.Empty to SearchBarResultState.Initial
This commit is contained in:
parent
dbfa9b0dc6
commit
2f49de1fbb
13 changed files with 24 additions and 24 deletions
|
|
@ -59,17 +59,17 @@ class DefaultUserListPresenter @AssistedInject constructor(
|
||||||
val selectedUsers by userListDataStore.selectedUsers().collectAsState(emptyList())
|
val selectedUsers by userListDataStore.selectedUsers().collectAsState(emptyList())
|
||||||
var searchQuery by rememberSaveable { mutableStateOf("") }
|
var searchQuery by rememberSaveable { mutableStateOf("") }
|
||||||
var searchResults: SearchBarResultState<ImmutableList<UserSearchResult>> by remember {
|
var searchResults: SearchBarResultState<ImmutableList<UserSearchResult>> by remember {
|
||||||
mutableStateOf(SearchBarResultState.Empty())
|
mutableStateOf(SearchBarResultState.Initial())
|
||||||
}
|
}
|
||||||
var isFetchingSearchResults by remember { mutableStateOf(false) }
|
var isFetchingSearchResults by remember { mutableStateOf(false) }
|
||||||
|
|
||||||
LaunchedEffect(searchQuery) {
|
LaunchedEffect(searchQuery) {
|
||||||
searchResults = SearchBarResultState.Empty()
|
searchResults = SearchBarResultState.Initial()
|
||||||
isFetchingSearchResults = false
|
isFetchingSearchResults = false
|
||||||
userRepository.search(searchQuery).onEach { state ->
|
userRepository.search(searchQuery).onEach { state ->
|
||||||
isFetchingSearchResults = state.isFetchingSearchResults
|
isFetchingSearchResults = state.isFetchingSearchResults
|
||||||
searchResults = when {
|
searchResults = when {
|
||||||
state.results.isEmpty() && state.isFetchingSearchResults -> SearchBarResultState.Empty()
|
state.results.isEmpty() && state.isFetchingSearchResults -> SearchBarResultState.Initial()
|
||||||
state.results.isEmpty() && !state.isFetchingSearchResults -> SearchBarResultState.NoResultsFound()
|
state.results.isEmpty() && !state.isFetchingSearchResults -> SearchBarResultState.NoResultsFound()
|
||||||
else -> SearchBarResultState.Results(state.results.toImmutableList())
|
else -> SearchBarResultState.Results(state.results.toImmutableList())
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,7 @@ open class UserListStateProvider : PreviewParameterProvider<UserListState> {
|
||||||
fun aUserListState() = UserListState(
|
fun aUserListState() = UserListState(
|
||||||
isSearchActive = false,
|
isSearchActive = false,
|
||||||
searchQuery = "",
|
searchQuery = "",
|
||||||
searchResults = SearchBarResultState.Empty(),
|
searchResults = SearchBarResultState.Initial(),
|
||||||
selectedUsers = persistentListOf(),
|
selectedUsers = persistentListOf(),
|
||||||
selectionMode = SelectionMode.Single,
|
selectionMode = SelectionMode.Single,
|
||||||
isFetchingSearchResults = false,
|
isFetchingSearchResults = false,
|
||||||
|
|
|
||||||
|
|
@ -56,7 +56,7 @@ class DefaultUserListPresenterTests {
|
||||||
assertThat(initialState.isMultiSelectionEnabled).isFalse()
|
assertThat(initialState.isMultiSelectionEnabled).isFalse()
|
||||||
assertThat(initialState.isSearchActive).isFalse()
|
assertThat(initialState.isSearchActive).isFalse()
|
||||||
assertThat(initialState.selectedUsers).isEmpty()
|
assertThat(initialState.selectedUsers).isEmpty()
|
||||||
assertThat(initialState.searchResults).isInstanceOf(SearchBarResultState.Empty::class.java)
|
assertThat(initialState.searchResults).isInstanceOf(SearchBarResultState.Initial::class.java)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -77,7 +77,7 @@ class DefaultUserListPresenterTests {
|
||||||
assertThat(initialState.isMultiSelectionEnabled).isTrue()
|
assertThat(initialState.isMultiSelectionEnabled).isTrue()
|
||||||
assertThat(initialState.isSearchActive).isFalse()
|
assertThat(initialState.isSearchActive).isFalse()
|
||||||
assertThat(initialState.selectedUsers).isEmpty()
|
assertThat(initialState.selectedUsers).isEmpty()
|
||||||
assertThat(initialState.searchResults).isInstanceOf(SearchBarResultState.Empty::class.java)
|
assertThat(initialState.searchResults).isInstanceOf(SearchBarResultState.Initial::class.java)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -132,7 +132,7 @@ class DefaultUserListPresenterTests {
|
||||||
val initialState = awaitItem()
|
val initialState = awaitItem()
|
||||||
|
|
||||||
initialState.eventSink(UserListEvents.UpdateSearchQuery("alice"))
|
initialState.eventSink(UserListEvents.UpdateSearchQuery("alice"))
|
||||||
assertThat(initialState.searchResults).isInstanceOf(SearchBarResultState.Empty::class.java)
|
assertThat(initialState.searchResults).isInstanceOf(SearchBarResultState.Initial::class.java)
|
||||||
assertThat(userRepository.providedQuery).isEqualTo("alice")
|
assertThat(userRepository.providedQuery).isEqualTo("alice")
|
||||||
skipItems(2)
|
skipItems(2)
|
||||||
|
|
||||||
|
|
@ -184,7 +184,7 @@ class DefaultUserListPresenterTests {
|
||||||
val initialState = awaitItem()
|
val initialState = awaitItem()
|
||||||
|
|
||||||
initialState.eventSink(UserListEvents.UpdateSearchQuery("alice"))
|
initialState.eventSink(UserListEvents.UpdateSearchQuery("alice"))
|
||||||
assertThat(initialState.searchResults).isInstanceOf(SearchBarResultState.Empty::class.java)
|
assertThat(initialState.searchResults).isInstanceOf(SearchBarResultState.Initial::class.java)
|
||||||
assertThat(userRepository.providedQuery).isEqualTo("alice")
|
assertThat(userRepository.providedQuery).isEqualTo("alice")
|
||||||
skipItems(2)
|
skipItems(2)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ class RoomInviteMembersPresenter @Inject constructor(
|
||||||
override fun present(): RoomInviteMembersState {
|
override fun present(): RoomInviteMembersState {
|
||||||
val roomMembers = remember { mutableStateOf<AsyncData<ImmutableList<RoomMember>>>(AsyncData.Loading()) }
|
val roomMembers = remember { mutableStateOf<AsyncData<ImmutableList<RoomMember>>>(AsyncData.Loading()) }
|
||||||
val selectedUsers = remember { mutableStateOf<ImmutableList<MatrixUser>>(persistentListOf()) }
|
val selectedUsers = remember { mutableStateOf<ImmutableList<MatrixUser>>(persistentListOf()) }
|
||||||
val searchResults = remember { mutableStateOf<SearchBarResultState<ImmutableList<InvitableUser>>>(SearchBarResultState.Empty()) }
|
val searchResults = remember { mutableStateOf<SearchBarResultState<ImmutableList<InvitableUser>>>(SearchBarResultState.Initial()) }
|
||||||
var searchQuery by rememberSaveable { mutableStateOf("") }
|
var searchQuery by rememberSaveable { mutableStateOf("") }
|
||||||
var searchActive by rememberSaveable { mutableStateOf(false) }
|
var searchActive by rememberSaveable { mutableStateOf(false) }
|
||||||
var isFetchingSearchResults = rememberSaveable { mutableStateOf(false) }
|
var isFetchingSearchResults = rememberSaveable { mutableStateOf(false) }
|
||||||
|
|
@ -129,14 +129,14 @@ class RoomInviteMembersPresenter @Inject constructor(
|
||||||
isFetchingSearchResults: MutableState<Boolean>,
|
isFetchingSearchResults: MutableState<Boolean>,
|
||||||
searchQuery: String,
|
searchQuery: String,
|
||||||
) = withContext(coroutineDispatchers.io) {
|
) = withContext(coroutineDispatchers.io) {
|
||||||
searchResults.value = SearchBarResultState.Empty()
|
searchResults.value = SearchBarResultState.Initial()
|
||||||
isFetchingSearchResults.value = false
|
isFetchingSearchResults.value = false
|
||||||
val joinedMembers = roomMembers.value.dataOrNull().orEmpty()
|
val joinedMembers = roomMembers.value.dataOrNull().orEmpty()
|
||||||
|
|
||||||
userRepository.search(searchQuery).onEach { state ->
|
userRepository.search(searchQuery).onEach { state ->
|
||||||
isFetchingSearchResults.value = state.isFetchingSearchResults
|
isFetchingSearchResults.value = state.isFetchingSearchResults
|
||||||
searchResults.value = when {
|
searchResults.value = when {
|
||||||
state.results.isEmpty() && state.isFetchingSearchResults -> SearchBarResultState.Empty()
|
state.results.isEmpty() && state.isFetchingSearchResults -> SearchBarResultState.Initial()
|
||||||
state.results.isEmpty() && !state.isFetchingSearchResults -> SearchBarResultState.NoResultsFound()
|
state.results.isEmpty() && !state.isFetchingSearchResults -> SearchBarResultState.NoResultsFound()
|
||||||
else -> SearchBarResultState.Results(state.results.map { result ->
|
else -> SearchBarResultState.Results(state.results.map { result ->
|
||||||
val existingMembership = joinedMembers.firstOrNull { j -> j.userId == result.matrixUser.userId }?.membership
|
val existingMembership = joinedMembers.firstOrNull { j -> j.userId == result.matrixUser.userId }?.membership
|
||||||
|
|
|
||||||
|
|
@ -81,7 +81,7 @@ internal class RoomInviteMembersStateProvider : PreviewParameterProvider<RoomInv
|
||||||
private fun aRoomInviteMembersState(
|
private fun aRoomInviteMembersState(
|
||||||
canInvite: Boolean = false,
|
canInvite: Boolean = false,
|
||||||
searchQuery: String = "",
|
searchQuery: String = "",
|
||||||
searchResults: SearchBarResultState<ImmutableList<InvitableUser>> = SearchBarResultState.Empty(),
|
searchResults: SearchBarResultState<ImmutableList<InvitableUser>> = SearchBarResultState.Initial(),
|
||||||
selectedUsers: ImmutableList<MatrixUser> = persistentListOf(),
|
selectedUsers: ImmutableList<MatrixUser> = persistentListOf(),
|
||||||
isSearchActive: Boolean = false,
|
isSearchActive: Boolean = false,
|
||||||
isFetchingSearchResults: Boolean = false,
|
isFetchingSearchResults: Boolean = false,
|
||||||
|
|
|
||||||
|
|
@ -47,7 +47,7 @@ class RoomMemberListPresenter @Inject constructor(
|
||||||
var roomMembers by remember { mutableStateOf<AsyncData<RoomMembers>>(AsyncData.Loading()) }
|
var roomMembers by remember { mutableStateOf<AsyncData<RoomMembers>>(AsyncData.Loading()) }
|
||||||
var searchQuery by rememberSaveable { mutableStateOf("") }
|
var searchQuery by rememberSaveable { mutableStateOf("") }
|
||||||
var searchResults by remember {
|
var searchResults by remember {
|
||||||
mutableStateOf<SearchBarResultState<RoomMembers>>(SearchBarResultState.Empty())
|
mutableStateOf<SearchBarResultState<RoomMembers>>(SearchBarResultState.Initial())
|
||||||
}
|
}
|
||||||
var isSearchActive by rememberSaveable { mutableStateOf(false) }
|
var isSearchActive by rememberSaveable { mutableStateOf(false) }
|
||||||
|
|
||||||
|
|
@ -71,7 +71,7 @@ class RoomMemberListPresenter @Inject constructor(
|
||||||
LaunchedEffect(searchQuery) {
|
LaunchedEffect(searchQuery) {
|
||||||
withContext(coroutineDispatchers.io) {
|
withContext(coroutineDispatchers.io) {
|
||||||
searchResults = if (searchQuery.isEmpty()) {
|
searchResults = if (searchQuery.isEmpty()) {
|
||||||
SearchBarResultState.Empty()
|
SearchBarResultState.Initial()
|
||||||
} else {
|
} else {
|
||||||
val results = roomMemberListDataSource.search(searchQuery).groupBy { it.membership }
|
val results = roomMemberListDataSource.search(searchQuery).groupBy { it.membership }
|
||||||
if (results.isEmpty()) SearchBarResultState.NoResultsFound()
|
if (results.isEmpty()) SearchBarResultState.NoResultsFound()
|
||||||
|
|
|
||||||
|
|
@ -60,7 +60,7 @@ internal class RoomMemberListStateProvider : PreviewParameterProvider<RoomMember
|
||||||
|
|
||||||
internal fun aRoomMemberListState(
|
internal fun aRoomMemberListState(
|
||||||
roomMembers: AsyncData<RoomMembers> = AsyncData.Uninitialized,
|
roomMembers: AsyncData<RoomMembers> = AsyncData.Uninitialized,
|
||||||
searchResults: SearchBarResultState<RoomMembers> = SearchBarResultState.Empty(),
|
searchResults: SearchBarResultState<RoomMembers> = SearchBarResultState.Initial(),
|
||||||
) = RoomMemberListState(
|
) = RoomMemberListState(
|
||||||
roomMembers = roomMembers,
|
roomMembers = roomMembers,
|
||||||
searchQuery = "",
|
searchQuery = "",
|
||||||
|
|
|
||||||
|
|
@ -66,7 +66,7 @@ internal class RoomInviteMembersPresenterTest {
|
||||||
}.test {
|
}.test {
|
||||||
val initialState = awaitItem()
|
val initialState = awaitItem()
|
||||||
|
|
||||||
assertThat(initialState.searchResults).isInstanceOf(SearchBarResultState.Empty::class.java)
|
assertThat(initialState.searchResults).isInstanceOf(SearchBarResultState.Initial::class.java)
|
||||||
assertThat(initialState.isSearchActive).isFalse()
|
assertThat(initialState.isSearchActive).isFalse()
|
||||||
assertThat(initialState.canInvite).isFalse()
|
assertThat(initialState.canInvite).isFalse()
|
||||||
assertThat(initialState.searchQuery).isEmpty()
|
assertThat(initialState.searchQuery).isEmpty()
|
||||||
|
|
@ -112,7 +112,7 @@ internal class RoomInviteMembersPresenterTest {
|
||||||
assertThat(repository.providedQuery).isEqualTo("some query")
|
assertThat(repository.providedQuery).isEqualTo("some query")
|
||||||
repository.emitState(UserSearchResultState(results = emptyList(), isFetchingSearchResults = true))
|
repository.emitState(UserSearchResultState(results = emptyList(), isFetchingSearchResults = true))
|
||||||
consumeItemsUntilPredicate { it.isFetchingSearchResults }.last().also { state ->
|
consumeItemsUntilPredicate { it.isFetchingSearchResults }.last().also { state ->
|
||||||
assertThat(state.searchResults).isInstanceOf(SearchBarResultState.Empty::class.java)
|
assertThat(state.searchResults).isInstanceOf(SearchBarResultState.Initial::class.java)
|
||||||
assertThat(state.isFetchingSearchResults).isTrue()
|
assertThat(state.isFetchingSearchResults).isTrue()
|
||||||
}
|
}
|
||||||
repository.emitState(results = emptyList(), isFetchingSearchResults = false)
|
repository.emitState(results = emptyList(), isFetchingSearchResults = false)
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@ class RoomMemberListPresenterTests {
|
||||||
val initialState = awaitItem()
|
val initialState = awaitItem()
|
||||||
assertThat(initialState.roomMembers).isInstanceOf(AsyncData.Loading::class.java)
|
assertThat(initialState.roomMembers).isInstanceOf(AsyncData.Loading::class.java)
|
||||||
assertThat(initialState.searchQuery).isEmpty()
|
assertThat(initialState.searchQuery).isEmpty()
|
||||||
assertThat(initialState.searchResults).isInstanceOf(SearchBarResultState.Empty::class.java)
|
assertThat(initialState.searchResults).isInstanceOf(SearchBarResultState.Initial::class.java)
|
||||||
assertThat(initialState.isSearchActive).isFalse()
|
assertThat(initialState.isSearchActive).isFalse()
|
||||||
val loadedState = awaitItem()
|
val loadedState = awaitItem()
|
||||||
assertThat(loadedState.roomMembers).isInstanceOf(AsyncData.Success::class.java)
|
assertThat(loadedState.roomMembers).isInstanceOf(AsyncData.Success::class.java)
|
||||||
|
|
|
||||||
|
|
@ -59,7 +59,7 @@ fun <T> SearchBar(
|
||||||
modifier: Modifier = Modifier,
|
modifier: Modifier = Modifier,
|
||||||
enabled: Boolean = true,
|
enabled: Boolean = true,
|
||||||
showBackButton: Boolean = true,
|
showBackButton: Boolean = true,
|
||||||
resultState: SearchBarResultState<T> = SearchBarResultState.Empty(),
|
resultState: SearchBarResultState<T> = SearchBarResultState.Initial(),
|
||||||
shape: Shape = SearchBarDefaults.inputFieldShape,
|
shape: Shape = SearchBarDefaults.inputFieldShape,
|
||||||
tonalElevation: Dp = SearchBarDefaults.TonalElevation,
|
tonalElevation: Dp = SearchBarDefaults.TonalElevation,
|
||||||
windowInsets: WindowInsets = SearchBarDefaults.windowInsets,
|
windowInsets: WindowInsets = SearchBarDefaults.windowInsets,
|
||||||
|
|
@ -184,7 +184,7 @@ object ElementSearchBarDefaults {
|
||||||
@Immutable
|
@Immutable
|
||||||
sealed interface SearchBarResultState<in T> {
|
sealed interface SearchBarResultState<in T> {
|
||||||
/** No search results are available yet (e.g. because the user hasn't entered a search term). */
|
/** No search results are available yet (e.g. because the user hasn't entered a search term). */
|
||||||
class Empty<T> : SearchBarResultState<T>
|
class Initial<T> : SearchBarResultState<T>
|
||||||
|
|
||||||
/** The search has completed, but no results were found. */
|
/** The search has completed, but no results were found. */
|
||||||
class NoResultsFound<T> : SearchBarResultState<T>
|
class NoResultsFound<T> : SearchBarResultState<T>
|
||||||
|
|
@ -274,7 +274,7 @@ private fun ContentToPreview(
|
||||||
query: String = "",
|
query: String = "",
|
||||||
active: Boolean = false,
|
active: Boolean = false,
|
||||||
showBackButton: Boolean = true,
|
showBackButton: Boolean = true,
|
||||||
resultState: SearchBarResultState<String> = SearchBarResultState.Empty(),
|
resultState: SearchBarResultState<String> = SearchBarResultState.Initial(),
|
||||||
contentPrefix: @Composable ColumnScope.() -> Unit = {},
|
contentPrefix: @Composable ColumnScope.() -> Unit = {},
|
||||||
contentSuffix: @Composable ColumnScope.() -> Unit = {},
|
contentSuffix: @Composable ColumnScope.() -> Unit = {},
|
||||||
resultHandler: @Composable ColumnScope.(String) -> Unit = {},
|
resultHandler: @Composable ColumnScope.(String) -> Unit = {},
|
||||||
|
|
|
||||||
|
|
@ -51,7 +51,7 @@ class RoomSelectPresenter @AssistedInject constructor(
|
||||||
var selectedRooms by remember { mutableStateOf(persistentListOf<RoomSummaryDetails>()) }
|
var selectedRooms by remember { mutableStateOf(persistentListOf<RoomSummaryDetails>()) }
|
||||||
var query by remember { mutableStateOf("") }
|
var query by remember { mutableStateOf("") }
|
||||||
var isSearchActive by remember { mutableStateOf(false) }
|
var isSearchActive by remember { mutableStateOf(false) }
|
||||||
var results: SearchBarResultState<ImmutableList<RoomSummaryDetails>> by remember { mutableStateOf(SearchBarResultState.Empty()) }
|
var results: SearchBarResultState<ImmutableList<RoomSummaryDetails>> by remember { mutableStateOf(SearchBarResultState.Initial()) }
|
||||||
|
|
||||||
val summaries by client.roomListService.allRooms.summaries.collectAsState()
|
val summaries by client.roomListService.allRooms.summaries.collectAsState()
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -48,7 +48,7 @@ open class RoomSelectStateProvider : PreviewParameterProvider<RoomSelectState> {
|
||||||
}
|
}
|
||||||
|
|
||||||
private fun aRoomSelectState(
|
private fun aRoomSelectState(
|
||||||
resultState: SearchBarResultState<ImmutableList<RoomSummaryDetails>> = SearchBarResultState.Empty(),
|
resultState: SearchBarResultState<ImmutableList<RoomSummaryDetails>> = SearchBarResultState.Initial(),
|
||||||
query: String = "",
|
query: String = "",
|
||||||
isSearchActive: Boolean = false,
|
isSearchActive: Boolean = false,
|
||||||
selectedRooms: ImmutableList<RoomSummaryDetails> = persistentListOf(),
|
selectedRooms: ImmutableList<RoomSummaryDetails> = persistentListOf(),
|
||||||
|
|
|
||||||
|
|
@ -45,7 +45,7 @@ class RoomSelectPresenterTests {
|
||||||
}.test {
|
}.test {
|
||||||
val initialState = awaitItem()
|
val initialState = awaitItem()
|
||||||
assertThat(initialState.selectedRooms).isEmpty()
|
assertThat(initialState.selectedRooms).isEmpty()
|
||||||
assertThat(initialState.resultState).isInstanceOf(SearchBarResultState.Empty::class.java)
|
assertThat(initialState.resultState).isInstanceOf(SearchBarResultState.Initial::class.java)
|
||||||
assertThat(initialState.isSearchActive).isFalse()
|
assertThat(initialState.isSearchActive).isFalse()
|
||||||
// Search is run automatically
|
// Search is run automatically
|
||||||
val searchState = awaitItem()
|
val searchState = awaitItem()
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue