changed labeled error field to take some states

This commit is contained in:
Lukas Barragan Torres 2023-05-10 12:44:51 +02:00
parent 74d2920562
commit d6496cb8ad

View file

@ -3,7 +3,6 @@ package be.ugent.sel.studeez.common.composable
import androidx.annotation.StringRes import androidx.annotation.StringRes
import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.padding import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.text.KeyboardActions
import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.foundation.text.KeyboardOptions
import androidx.compose.material.* import androidx.compose.material.*
import androidx.compose.material.icons.Icons import androidx.compose.material.icons.Icons
@ -22,7 +21,6 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.dp
import be.ugent.sel.studeez.common.ext.fieldModifier import be.ugent.sel.studeez.common.ext.fieldModifier
import be.ugent.sel.studeez.resources import be.ugent.sel.studeez.resources
import kotlin.math.sin
import be.ugent.sel.studeez.R.drawable as AppIcon import be.ugent.sel.studeez.R.drawable as AppIcon
import be.ugent.sel.studeez.R.string as AppText import be.ugent.sel.studeez.R.string as AppText
@ -119,7 +117,9 @@ fun LabeledErrorTextField(
initialValue: String, initialValue: String,
@StringRes label: Int, @StringRes label: Int,
singleLine: Boolean = false, singleLine: Boolean = false,
errorText: Int, isValid: MutableState<Boolean>,
isFirst: MutableState<Boolean> = remember { mutableStateOf(false) },
@StringRes errorText: Int,
keyboardType: KeyboardType, keyboardType: KeyboardType,
predicate: (String) -> Boolean, predicate: (String) -> Boolean,
onNewCorrectValue: (String) -> Unit onNewCorrectValue: (String) -> Unit
@ -128,31 +128,28 @@ fun LabeledErrorTextField(
mutableStateOf(initialValue) mutableStateOf(initialValue)
} }
var isValid by remember {
mutableStateOf(predicate(value))
}
Column { Column {
OutlinedTextField( OutlinedTextField(
modifier = modifier.fieldModifier(), modifier = modifier.fieldModifier(),
value = value, value = value,
onValueChange = { newText -> onValueChange = { newText ->
isFirst.value = false
value = newText value = newText
isValid = predicate(value) isValid.value = predicate(value)
if (isValid) { if (isValid.value) {
onNewCorrectValue(newText) onNewCorrectValue(newText)
} }
}, },
singleLine = singleLine, singleLine = singleLine,
label = { Text(text = stringResource(id = label)) }, label = { Text(text = stringResource(id = label)) },
isError = !isValid, isError = !isValid.value && !isFirst.value,
keyboardOptions = KeyboardOptions( keyboardOptions = KeyboardOptions(
keyboardType = keyboardType, keyboardType = keyboardType,
imeAction = ImeAction.Done imeAction = ImeAction.Done
) )
) )
if (!isValid) { if (!isValid.value && !isFirst.value) {
Text( Text(
modifier = Modifier.padding(start = 16.dp), modifier = Modifier.padding(start = 16.dp),
text = stringResource(id = errorText), text = stringResource(id = errorText),