Cleanup SearchBarWithAutoCompletion function parameters

This commit is contained in:
Nebojsa Vuksic 2025-08-01 11:21:03 +02:00
parent a6435ba771
commit 5bae830655
2 changed files with 9 additions and 11 deletions

View File

@ -5,7 +5,6 @@ import androidx.compose.foundation.interaction.HoverInteraction
import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.*
import androidx.compose.foundation.text.input.TextFieldState import androidx.compose.foundation.text.input.TextFieldState
import androidx.compose.foundation.text.input.rememberTextFieldState
import androidx.compose.foundation.text.input.setTextAndPlaceCursorAtEnd import androidx.compose.foundation.text.input.setTextAndPlaceCursorAtEnd
import androidx.compose.runtime.* import androidx.compose.runtime.*
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
@ -22,7 +21,6 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.window.PopupProperties import androidx.compose.ui.window.PopupProperties
import androidx.compose.ui.zIndex import androidx.compose.ui.zIndex
import kotlinx.coroutines.flow.distinctUntilChanged import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.onEach
import org.jetbrains.jewel.foundation.ExperimentalJewelApi import org.jetbrains.jewel.foundation.ExperimentalJewelApi
import org.jetbrains.jewel.ui.component.Icon import org.jetbrains.jewel.ui.component.Icon
import org.jetbrains.jewel.ui.component.PopupMenu import org.jetbrains.jewel.ui.component.PopupMenu
@ -38,10 +36,10 @@ import org.jetbrains.plugins.template.weatherApp.services.SearchAutoCompletionIt
internal fun <T> SearchBarWithAutoCompletion( internal fun <T> SearchBarWithAutoCompletion(
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
searchAutoCompletionItemProvider: SearchAutoCompletionItemProvider<T>, searchAutoCompletionItemProvider: SearchAutoCompletionItemProvider<T>,
textFieldState: TextFieldState = rememberTextFieldState(""), textFieldState: TextFieldState,
searchFieldPlaceholder: String = "Type a place name...", searchFieldPlaceholder: String = "Type a place name...",
onInputCleared: () -> Unit = {}, onClear: () -> Unit = {},
onItemAutocomplete: (T) -> Unit = {}, onSelectCompletion: (T) -> Unit = {},
) where T : Searchable, T : PreviewableItem { ) where T : Searchable, T : PreviewableItem {
val focusRequester = remember { FocusRequester() } val focusRequester = remember { FocusRequester() }
@ -67,7 +65,7 @@ internal fun <T> SearchBarWithAutoCompletion(
.fillMaxWidth() .fillMaxWidth()
.handlePopupCompletionKeyEvents(popupController) { item -> .handlePopupCompletionKeyEvents(popupController) { item ->
textFieldState.setTextAndPlaceCursorAtEnd(item.label) textFieldState.setTextAndPlaceCursorAtEnd(item.label)
onItemAutocomplete(item) onSelectCompletion(item)
} }
.focusRequester(focusRequester), .focusRequester(focusRequester),
placeholder = { Text(searchFieldPlaceholder) }, placeholder = { Text(searchFieldPlaceholder) },
@ -77,7 +75,7 @@ internal fun <T> SearchBarWithAutoCompletion(
trailingIcon = { trailingIcon = {
if (textFieldState.text.isNotBlank()) { if (textFieldState.text.isNotBlank()) {
CloseIconButton { CloseIconButton {
onInputCleared() onClear()
textFieldState.setTextAndPlaceCursorAtEnd("") textFieldState.setTextAndPlaceCursorAtEnd("")
} }
} }
@ -101,9 +99,9 @@ internal fun <T> SearchBarWithAutoCompletion(
) { ) {
popupController.filteredItems.forEach { item -> popupController.filteredItems.forEach { item ->
selectableItem( selectableItem(
popupController.isItemSelected(item), popupController. isItemSelected(item),
onClick = { onClick = {
onItemAutocomplete(item) onSelectCompletion(item)
popupController.onItemAutocompleteConfirmed() popupController.onItemAutocompleteConfirmed()
textFieldState.setTextAndPlaceCursorAtEnd(item.label) textFieldState.setTextAndPlaceCursorAtEnd(item.label)
}, },

View File

@ -70,11 +70,11 @@ internal fun <T> SearchToolbarMenu(
.align(Alignment.CenterVertically), .align(Alignment.CenterVertically),
searchAutoCompletionItemProvider = searchAutoCompletionItemProvider, searchAutoCompletionItemProvider = searchAutoCompletionItemProvider,
textFieldState = searchTextFieldState, textFieldState = searchTextFieldState,
onInputCleared = { onClear = {
isConfirmButtonVisible.value = false isConfirmButtonVisible.value = false
previewItem.value = null previewItem.value = null
}, },
onItemAutocomplete = { autocompletedItem -> onSelectCompletion = { autocompletedItem ->
isConfirmButtonVisible.value = true isConfirmButtonVisible.value = true
previewItem.value = autocompletedItem previewItem.value = autocompletedItem
onSearchPerformed(autocompletedItem) onSearchPerformed(autocompletedItem)