summaryrefslogtreecommitdiff
path: root/anastasis/src/main/java/net/taler/anastasis/ui/forms/EditSecretForm.kt
diff options
context:
space:
mode:
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.kt71
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