TP-40997 | Clear focus of cursor of CustomTextFieldRenderer on update data action (#178)

This commit is contained in:
Sanjay P
2023-09-15 13:41:13 +05:30
committed by GitHub
parent 0a5ef1414a
commit bbf889730e

View File

@@ -15,9 +15,9 @@ import androidx.compose.ui.focus.onFocusChanged
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.SolidColor
import androidx.compose.ui.layout.layoutId
import androidx.compose.ui.platform.LocalFocusManager
import androidx.compose.ui.platform.LocalSoftwareKeyboardController
import androidx.compose.ui.text.*
import androidx.compose.ui.text.input.TextFieldValue
import androidx.compose.ui.text.input.VisualTransformation
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
@@ -79,11 +79,10 @@ class CustomTextFieldRenderer(
val isTextTransformedValueEdited = remember {
mutableStateOf(false)
}
var cursorSelection by remember { mutableStateOf(TextRange.Zero) }
val focusManager = LocalFocusManager.current
var inputValue by remember(customTextFieldData?.inputText) {
if (isTextTransformedValueEdited.value.not()) {
cursorSelection = TextRange(customTextFieldData?.inputText.orEmpty().length)
focusManager.clearFocus()
}
val input = onInputValueChange(
input = customTextFieldData?.inputText.orEmpty(),
@@ -92,7 +91,7 @@ class CustomTextFieldRenderer(
uiTronViewModel = uiTronViewModel,
isTextTransformedValueUpdated = isTextTransformedValueEdited
)
mutableStateOf(TextFieldValue(text = input, selection = cursorSelection))
mutableStateOf(input)
}
var isFocused by remember {
mutableStateOf(false)
@@ -206,17 +205,14 @@ class CustomTextFieldRenderer(
value = inputValue,
onValueChange = { input ->
val editedInput = onInputValueChange(
input = input.text,
input = input,
property = property,
customTextFieldData = customTextFieldData,
uiTronViewModel = uiTronViewModel,
isTextTransformedValueUpdated = mutableStateOf(false)
)
if (input.text != inputValue.text) {
isTextTransformedValueEdited.value = true
}
cursorSelection = TextRange(input.selection.start)
inputValue = TextFieldValue(text = editedInput, selection = cursorSelection)
isTextTransformedValueEdited.value = true
inputValue = editedInput
},
singleLine = property.singleLine ?: false,
visualTransformation = property.visualTransformation?.getVisualTransformation()
@@ -226,7 +222,7 @@ class CustomTextFieldRenderer(
property.cursorColor?.hexToComposeColor ?: Color.Gray
)
)
if (inputValue.text.isEmpty()) {
if (inputValue.isEmpty()) {
property.hintStyle?.let {
TextRenderer().Render(
property = it,
@@ -254,7 +250,7 @@ class CustomTextFieldRenderer(
}
uiTronViewModel.handle[property.errorMessageLayoutId.getDataId()] =
TextData(customTextFieldData.errorMessage)
} else if (inputValue.text.isNotNullAndNotEmpty()) {
} else if (inputValue.isNotNullAndNotEmpty()) {
if (isFocused) {
borderColor = property.colors?.focusedBorderColor
} else {
@@ -262,7 +258,7 @@ class CustomTextFieldRenderer(
}
val successText = getTransformedText(
property.successTextTransformation,
inputValue.text
inputValue
)
if (successText.isNotNullAndNotEmpty()) {
property.successView?.let {