Selects the full text when adding users to list

This commit is contained in:
Vitor Pamplona
2025-11-05 17:06:59 -05:00
parent 6c630c75c2
commit 83f460c01d
@@ -20,7 +20,6 @@
*/ */
package com.vitorpamplona.amethyst.ui.screen.loggedIn.lists.display package com.vitorpamplona.amethyst.ui.screen.loggedIn.lists.display
import android.annotation.SuppressLint
import androidx.compose.animation.animateContentSize import androidx.compose.animation.animateContentSize
import androidx.compose.foundation.background import androidx.compose.foundation.background
import androidx.compose.foundation.border import androidx.compose.foundation.border
@@ -77,7 +76,9 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip import androidx.compose.ui.draw.clip
import androidx.compose.ui.graphics.Color import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalFocusManager import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.text.TextRange
import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.input.TextFieldValue
import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.Dp
@@ -258,7 +259,30 @@ private fun RenderAddUserFieldAndSuggestions(
Spacer(HalfVertSpacer) Spacer(HalfVertSpacer)
UserSearchField(viewModel.userSuggestions) var userName by remember(viewModel) { mutableStateOf(TextFieldValue(viewModel.userSuggestions.currentWord.value)) }
val focusManager = LocalFocusManager.current
OutlinedTextField(
label = { Text(text = stringRes(R.string.search_and_add_a_user)) },
modifier = Modifier.padding(horizontal = Size10dp).fillMaxWidth(),
value = userName,
onValueChange = {
userName = it
viewModel.userSuggestions.processCurrentWord(it.text)
},
singleLine = true,
trailingIcon = {
IconButton(
onClick = {
userName = TextFieldValue("")
viewModel.userSuggestions.processCurrentWord("")
focusManager.clearFocus()
},
) {
ClearTextIcon()
}
},
)
ShowUserSuggestions( ShowUserSuggestions(
userSuggestions = viewModel.userSuggestions, userSuggestions = viewModel.userSuggestions,
@@ -269,11 +293,19 @@ private fun RenderAddUserFieldAndSuggestions(
accountViewModel.runIOCatching { accountViewModel.runIOCatching {
viewModel.addUserToSet(user, pagerState.currentPage == 0) viewModel.addUserToSet(user, pagerState.currentPage == 0)
} }
userName =
userName.copy(
selection = TextRange(0, userName.text.length),
)
}, },
onDelete = { user -> onDelete = { user ->
accountViewModel.runIOCatching { accountViewModel.runIOCatching {
viewModel.removeUserFromSet(user, pagerState.currentPage == 0) viewModel.removeUserFromSet(user, pagerState.currentPage == 0)
} }
userName =
userName.copy(
selection = TextRange(0, userName.text.length),
)
}, },
accountViewModel = accountViewModel, accountViewModel = accountViewModel,
) )
@@ -664,38 +696,3 @@ fun ListActionsMenu(
) )
} }
} }
@SuppressLint("StateFlowValueCalledInComposition")
@Composable
fun UserSearchField(
userSuggestions: UserSuggestionState,
modifier: Modifier = Modifier,
) {
var userName by remember(userSuggestions) { mutableStateOf(userSuggestions.currentWord.value) }
val focusManager = LocalFocusManager.current
OutlinedTextField(
label = { Text(text = stringRes(R.string.search_and_add_a_user)) },
modifier =
modifier
.padding(horizontal = Size10dp)
.fillMaxWidth(),
value = userName,
onValueChange = {
userName = it
userSuggestions.processCurrentWord(it)
},
singleLine = true,
trailingIcon = {
IconButton(
onClick = {
userName = ""
userSuggestions.processCurrentWord("")
focusManager.clearFocus()
},
) {
ClearTextIcon()
}
},
)
}