Rename SearchBarResultState.Empty to SearchBarResultState.Initial

This commit is contained in:
ganfra 2024-01-05 15:40:02 +01:00
parent dbfa9b0dc6
commit 2f49de1fbb
13 changed files with 24 additions and 24 deletions

View file

@ -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())
} }

View file

@ -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,

View file

@ -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)

View file

@ -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

View file

@ -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,

View file

@ -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()

View file

@ -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 = "",

View file

@ -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)

View file

@ -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)

View file

@ -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 = {},

View file

@ -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()

View file

@ -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(),

View file

@ -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()