From 9bb48a63fa0955723fd33f4b80a4fb328f6b5918 Mon Sep 17 00:00:00 2001 From: lbarraga Date: Sat, 8 Apr 2023 17:27:03 +0200 Subject: [PATCH] Added list of reusable textfield components --- .../common/composable/TextFieldComposable.kt | 94 +++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 app/src/main/java/be/ugent/sel/studeez/common/composable/TextFieldComposable.kt diff --git a/app/src/main/java/be/ugent/sel/studeez/common/composable/TextFieldComposable.kt b/app/src/main/java/be/ugent/sel/studeez/common/composable/TextFieldComposable.kt new file mode 100644 index 0000000..403a08b --- /dev/null +++ b/app/src/main/java/be/ugent/sel/studeez/common/composable/TextFieldComposable.kt @@ -0,0 +1,94 @@ +package be.ugent.sel.studeez.common.composable + +import androidx.annotation.StringRes +import androidx.compose.foundation.text.KeyboardOptions +import androidx.compose.material.Icon +import androidx.compose.material.IconButton +import androidx.compose.material.OutlinedTextField +import androidx.compose.material.Text +import androidx.compose.material.icons.Icons +import androidx.compose.material.icons.filled.Email +import androidx.compose.material.icons.filled.Lock +import androidx.compose.runtime.* +import be.ugent.sel.studeez.R.string as AppText +import be.ugent.sel.studeez.R.drawable as AppIcon +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.res.stringResource +import androidx.compose.ui.text.input.KeyboardType +import androidx.compose.ui.text.input.PasswordVisualTransformation +import androidx.compose.ui.text.input.VisualTransformation + +@Composable +fun BasicField( + @StringRes text: Int, + value: String, + onNewValue: (String) -> Unit, + modifier: Modifier = Modifier +) { + OutlinedTextField( + singleLine = true, + modifier = modifier, + value = value, + onValueChange = { onNewValue(it) }, + placeholder = { Text(stringResource(text)) } + ) +} + +@Composable +fun EmailField(value: String, onNewValue: (String) -> Unit, modifier: Modifier = Modifier) { + OutlinedTextField( + singleLine = true, + modifier = modifier, + value = value, + onValueChange = { onNewValue(it) }, + placeholder = { Text(stringResource(AppText.email)) }, + leadingIcon = { Icon(imageVector = Icons.Default.Email, contentDescription = "Email") } + ) +} + +@Composable +fun PasswordField(value: String, onNewValue: (String) -> Unit, modifier: Modifier = Modifier) { + PasswordField(value, AppText.password, onNewValue, modifier) +} + +@Composable +fun RepeatPasswordField( + value: String, + onNewValue: (String) -> Unit, + modifier: Modifier = Modifier +) { + PasswordField(value, AppText.repeat_password, onNewValue, modifier) +} + +@Composable +private fun PasswordField( + value: String, + @StringRes placeholder: Int, + onNewValue: (String) -> Unit, + modifier: Modifier = Modifier +) { + var isVisible by remember { mutableStateOf(false) } + + val icon = + if (isVisible) painterResource(AppIcon.ic_visibility_on) + else painterResource(AppIcon.ic_visibility_off) + + val visualTransformation = + if (isVisible) VisualTransformation.None else PasswordVisualTransformation() + + OutlinedTextField( + modifier = modifier, + value = value, + onValueChange = { onNewValue(it) }, + placeholder = { Text(text = stringResource(placeholder)) }, + leadingIcon = { Icon(imageVector = Icons.Default.Lock, contentDescription = "Lock") }, + trailingIcon = { + IconButton(onClick = { isVisible = !isVisible }) { + Icon(painter = icon, contentDescription = "Visibility") + } + }, + keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Password), + visualTransformation = visualTransformation + ) +} \ No newline at end of file