Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: [ANDROAPP-5900] Adapt Input fields to TextFieldValue usage #3485

Merged
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
fix: [ANDROAPP-5900] set initial selection to value length
xavimolloy committed Feb 6, 2024

Unverified

This commit is not signed, but one or more authors requires that any commit attributed to them is signed.
commit 84aab558f677fcf5abd767698415df7fa4503e70
Original file line number Diff line number Diff line change
@@ -9,6 +9,7 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.testTag
import androidx.compose.ui.text.TextRange
import androidx.compose.ui.text.input.TextFieldValue
import androidx.compose.ui.unit.dp
import org.dhis2.R
@@ -52,9 +53,11 @@ fun ProvideInputDate(
) {
if (uiModel.showField) {
Spacer(modifier = Modifier.height(16.dp))
val textSelection = TextRange(if (uiModel.eventDate.dateValue != null) uiModel.eventDate.dateValue.length else 0)

var value by remember(uiModel.eventDate.dateValue) {
if (uiModel.eventDate.dateValue != null) {
mutableStateOf(TextFieldValue(formatStoredDateToUI(uiModel.eventDate.dateValue) ?: ""))
mutableStateOf(TextFieldValue(formatStoredDateToUI(uiModel.eventDate.dateValue) ?: "", textSelection))
} else {
mutableStateOf(TextFieldValue())
}
Original file line number Diff line number Diff line change
@@ -8,6 +8,7 @@ import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.semantics.contentDescription
import androidx.compose.ui.semantics.semantics
import androidx.compose.ui.text.TextRange
import androidx.compose.ui.text.input.TextFieldValue
import org.dhis2.commons.date.DateUtils
import org.dhis2.commons.extensions.toDate
@@ -37,11 +38,12 @@ fun ProvideInputDate(
ValueType.TIME -> DateTimeActionIconType.TIME to TimeTransformation()
else -> DateTimeActionIconType.DATE to DateTransformation()
}
val textSelection = TextRange(if (fieldUiModel.value != null) fieldUiModel.value!!.length else 0)

var value by remember(fieldUiModel.value) {
mutableStateOf(
if (fieldUiModel.value != null) {
TextFieldValue(formatStoredDateToUI(fieldUiModel.value!!, fieldUiModel.valueType))
TextFieldValue(formatStoredDateToUI(fieldUiModel.value!!, fieldUiModel.valueType), textSelection)
} else {
TextFieldValue()
},
Original file line number Diff line number Diff line change
@@ -23,6 +23,7 @@ import androidx.compose.ui.geometry.Rect
import androidx.compose.ui.geometry.Size
import androidx.compose.ui.layout.onSizeChanged
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.text.TextRange
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.text.input.TextFieldValue
import kotlinx.coroutines.launch
@@ -448,8 +449,10 @@ private fun ProvideIntegerPositive(
focusManager: FocusManager,
onNextClicked: () -> Unit,
) {
val textSelection = TextRange(if (fieldUiModel.value != null) fieldUiModel.value!!.length else 0)

var value by remember(fieldUiModel.value) {
mutableStateOf(TextFieldValue(fieldUiModel.value ?: ""))
mutableStateOf(TextFieldValue(fieldUiModel.value ?: "", textSelection))
}

InputPositiveInteger(
@@ -487,8 +490,10 @@ private fun ProvideIntegerPositiveOrZero(
onNextClicked: () -> Unit,

) {
val textSelection = TextRange(if (fieldUiModel.value != null) fieldUiModel.value!!.length else 0)

var value by remember(fieldUiModel.value) {
mutableStateOf(TextFieldValue(fieldUiModel.value ?: ""))
mutableStateOf(TextFieldValue(fieldUiModel.value ?: "", textSelection))
}

InputPositiveIntegerOrZero(
@@ -526,8 +531,10 @@ private fun ProvidePercentage(
onNextClicked: () -> Unit,

) {
val textSelection = TextRange(if (fieldUiModel.value != null) fieldUiModel.value!!.length else 0)

var value by remember(fieldUiModel.value) {
mutableStateOf(TextFieldValue(fieldUiModel.value ?: ""))
mutableStateOf(TextFieldValue(fieldUiModel.value ?: "", textSelection))
}

InputPercentage(
@@ -565,8 +572,10 @@ private fun ProvideNumber(
onNextClicked: () -> Unit,

) {
val textSelection = TextRange(if (fieldUiModel.value != null) fieldUiModel.value!!.length else 0)

var value by remember(fieldUiModel.value) {
mutableStateOf(TextFieldValue(fieldUiModel.value ?: ""))
mutableStateOf(TextFieldValue(fieldUiModel.value ?: "", textSelection))
}

InputNumber(
@@ -605,8 +614,9 @@ private fun ProvideIntegerNegative(
onNextClicked: () -> Unit,

) {
val textSelection = TextRange(if (fieldUiModel.value != null) fieldUiModel.value!!.length else 0)
var value by remember(fieldUiModel.value) {
mutableStateOf(TextFieldValue(fieldUiModel.value?.replace("-", "") ?: ""))
mutableStateOf(TextFieldValue(fieldUiModel.value?.replace("-", "") ?: "", textSelection))
}

InputNegativeInteger(
@@ -644,8 +654,10 @@ private fun ProvideLongText(
onNextClicked: () -> Unit,

) {
val textSelection = TextRange(if (fieldUiModel.value != null) fieldUiModel.value!!.length else 0)

var value by remember(fieldUiModel.value) {
mutableStateOf(TextFieldValue(fieldUiModel.value ?: ""))
mutableStateOf(TextFieldValue(fieldUiModel.value ?: "", textSelection))
}

InputLongText(
@@ -684,8 +696,9 @@ private fun ProvideLetter(
onNextClicked: () -> Unit,

) {
val textSelection = TextRange(if (fieldUiModel.value != null) fieldUiModel.value!!.length else 0)
var value by remember(fieldUiModel.value) {
mutableStateOf(TextFieldValue(fieldUiModel.value ?: ""))
mutableStateOf(TextFieldValue(fieldUiModel.value ?: "", textSelection))
}

InputLetter(
@@ -723,8 +736,9 @@ private fun ProvideInteger(
onNextClicked: () -> Unit,

) {
val textSelection = TextRange(if (fieldUiModel.value != null) fieldUiModel.value!!.length else 0)
var value by remember(fieldUiModel.value) {
mutableStateOf(TextFieldValue(fieldUiModel.value ?: ""))
mutableStateOf(TextFieldValue(fieldUiModel.value ?: "", textSelection))
}

InputInteger(
@@ -762,8 +776,10 @@ private fun ProvideEmail(
focusManager: FocusManager,
onNextClicked: () -> Unit,
) {
val textSelection = TextRange(if (fieldUiModel.value != null) fieldUiModel.value!!.length else 0)

var value by remember(fieldUiModel.value) {
mutableStateOf(TextFieldValue(fieldUiModel.value ?: ""))
mutableStateOf(TextFieldValue(fieldUiModel.value ?: "", textSelection))
}

InputEmail(
@@ -811,8 +827,10 @@ private fun ProvideInputPhoneNumber(
onNextClicked: () -> Unit,

) {
val textSelection = TextRange(if (fieldUiModel.value != null) fieldUiModel.value!!.length else 0)

var value by remember(fieldUiModel.value) {
mutableStateOf(TextFieldValue(fieldUiModel.value ?: ""))
mutableStateOf(TextFieldValue(fieldUiModel.value ?: "", textSelection))
}

InputPhoneNumber(
@@ -860,8 +878,10 @@ private fun ProvideInputLink(
onNextClicked: () -> Unit,

) {
val textSelection = TextRange(if (fieldUiModel.value != null) fieldUiModel.value!!.length else 0)

var value by remember(fieldUiModel.value) {
mutableStateOf(TextFieldValue(fieldUiModel.value ?: ""))
mutableStateOf(TextFieldValue(fieldUiModel.value ?: "", textSelection))
}

InputLink(
Original file line number Diff line number Diff line change
@@ -8,6 +8,7 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.focus.FocusManager
import androidx.compose.ui.text.TextRange
import androidx.compose.ui.text.input.TextFieldValue
import org.dhis2.form.extensions.autocompleteList
import org.dhis2.form.extensions.inputState
@@ -72,8 +73,9 @@ private fun ProvideQRInput(
focusManager: FocusManager,
onNextClicked: () -> Unit,
) {
val textSelection = TextRange(if (fieldUiModel.value != null) fieldUiModel.value!!.length else 0)
var value by remember(fieldUiModel.value) {
mutableStateOf(TextFieldValue(fieldUiModel.value ?: ""))
mutableStateOf(TextFieldValue(fieldUiModel.value ?: "", textSelection))
}

InputQRCode(
@@ -170,8 +172,10 @@ private fun ProvideBarcodeInput(
focusManager: FocusManager,
onNextClicked: () -> Unit,
) {
val textSelection = TextRange(if (fieldUiModel.value != null) fieldUiModel.value!!.length else 0)

var value by remember(fieldUiModel.value) {
mutableStateOf(TextFieldValue(fieldUiModel.value ?: ""))
mutableStateOf(TextFieldValue(fieldUiModel.value ?: "", textSelection))
}

InputBarCode(
Original file line number Diff line number Diff line change
@@ -7,6 +7,7 @@ import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.text.TextRange
import androidx.compose.ui.text.input.TextFieldValue
import org.dhis2.form.extensions.inputState
import org.dhis2.form.extensions.legend
@@ -22,8 +23,10 @@ fun ProvideUnitIntervalInput(
intentHandler: (FormIntent) -> Unit,
onNextClicked: () -> Unit,
) {
val textSelection = TextRange(if (fieldUiModel.value != null) fieldUiModel.value!!.length else 0)

var value by remember(fieldUiModel.value) {
mutableStateOf(TextFieldValue(fieldUiModel.value ?: ""))
mutableStateOf(TextFieldValue(fieldUiModel.value ?: "", textSelection))
}
InputUnitInterval(
modifier = modifier.fillMaxWidth(),