diff options
Diffstat (limited to 'anastasis/src/main/java/net/taler/anastasis/ui/forms/EditSecretForm.kt')
-rw-r--r-- | anastasis/src/main/java/net/taler/anastasis/ui/forms/EditSecretForm.kt | 71 |
1 files changed, 63 insertions, 8 deletions
diff --git a/anastasis/src/main/java/net/taler/anastasis/ui/forms/EditSecretForm.kt b/anastasis/src/main/java/net/taler/anastasis/ui/forms/EditSecretForm.kt index 2c97e92..5ec5269 100644 --- a/anastasis/src/main/java/net/taler/anastasis/ui/forms/EditSecretForm.kt +++ b/anastasis/src/main/java/net/taler/anastasis/ui/forms/EditSecretForm.kt @@ -23,17 +23,27 @@ import androidx.compose.foundation.text.KeyboardActions import androidx.compose.foundation.text.KeyboardOptions import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.OutlinedTextField +import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.focus.FocusRequester import androidx.compose.ui.focus.focusRequester import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.input.ImeAction +import androidx.compose.ui.tooling.preview.Preview +import kotlinx.datetime.Clock +import kotlinx.datetime.LocalDate +import kotlinx.datetime.TimeZone +import kotlinx.datetime.toLocalDateTime import net.taler.anastasis.R +import net.taler.anastasis.ui.reusable.components.DatePickerField +import net.taler.anastasis.ui.theme.AnastasisTheme import net.taler.anastasis.ui.theme.LocalSpacing -import net.taler.common.Timestamp @OptIn(ExperimentalMaterial3Api::class) @Composable @@ -41,14 +51,16 @@ fun EditSecretForm( modifier: Modifier = Modifier, name: String, value: String, - expiration: Timestamp? = null, + expirationDate: LocalDate, + onSecretNameEdited: (name: String) -> Unit, onSecretEdited: ( - name: String, value: String, - expiration: Timestamp?, + expirationDate: LocalDate, ) -> Unit, ) { val focusRequester2 = remember { FocusRequester() } + val tz = TimeZone.currentSystemDefault() + val currentDate = remember { Clock.System.now().toLocalDateTime(tz).date } Column( modifier = modifier, @@ -59,12 +71,13 @@ fun EditSecretForm( start = LocalSpacing.current.medium, end = LocalSpacing.current.medium, bottom = LocalSpacing.current.small, - ).fillMaxWidth(), + ) + .fillMaxWidth(), value = name, maxLines = 1, keyboardOptions = KeyboardOptions(imeAction = ImeAction.Next), keyboardActions = KeyboardActions(onNext = { focusRequester2.requestFocus() }), - onValueChange = { onSecretEdited(it, value, expiration) }, + onValueChange = { onSecretNameEdited(it) }, label = { Text(stringResource(R.string.secret_name)) }, supportingText = { Text(stringResource(R.string.secret_unique)) }, ) @@ -76,10 +89,52 @@ fun EditSecretForm( start = LocalSpacing.current.medium, end = LocalSpacing.current.medium, bottom = LocalSpacing.current.small, - ).fillMaxWidth(), + ) + .fillMaxWidth(), value = value, - onValueChange = { onSecretEdited(name, it, expiration) }, + onValueChange = { onSecretEdited(it, expirationDate) }, label = { Text(stringResource(R.string.secret_text)) }, ) + + DatePickerField( + modifier = Modifier + .padding( + start = LocalSpacing.current.medium, + end = LocalSpacing.current.medium, + bottom = LocalSpacing.current.small, + + ) + .fillMaxWidth(), + label = stringResource(R.string.secret_expiration), + date = expirationDate, + onDateSelected = { onSecretEdited(value, it) }, + minDate = currentDate, + ) + } +} + +@Preview +@Composable +fun EditSecretFormPreview() { + var name by remember { mutableStateOf("") } + var value by remember { mutableStateOf("") } + var expirationDate by remember { mutableStateOf<LocalDate>( + Clock.System.now().toLocalDateTime(TimeZone.currentSystemDefault()).date + ) } + AnastasisTheme { + Surface { + EditSecretForm( + name = name, + value = value, + expirationDate = expirationDate, + onSecretNameEdited = { n -> + name = n + }, + onSecretEdited = { v, d -> + value = v + expirationDate = d + }, + ) + } } }
\ No newline at end of file |