EditForm.kt 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package com.sirekanian.spacetime.ui
  2. import androidx.compose.foundation.layout.fillMaxWidth
  3. import androidx.compose.foundation.text.KeyboardOptions
  4. import androidx.compose.material.OutlinedTextField
  5. import androidx.compose.material.Text
  6. import androidx.compose.material.TextFieldDefaults
  7. import androidx.compose.material.ripple.LocalRippleTheme
  8. import androidx.compose.runtime.Composable
  9. import androidx.compose.runtime.LaunchedEffect
  10. import androidx.compose.runtime.remember
  11. import androidx.compose.ui.Modifier
  12. import androidx.compose.ui.focus.FocusRequester
  13. import androidx.compose.ui.focus.focusRequester
  14. import androidx.compose.ui.text.TextStyle
  15. import androidx.compose.ui.text.input.KeyboardCapitalization
  16. import androidx.compose.ui.text.input.KeyboardType
  17. import com.sirekanian.spacetime.model.EditablePage.Autofocus
  18. @Composable
  19. fun EditForm(
  20. name: NameField,
  21. isNameValid: Boolean,
  22. date: DateField,
  23. onDateChange: (String) -> Unit,
  24. isDateValid: Boolean,
  25. autofocus: Autofocus?,
  26. textStyle: TextStyle,
  27. ) {
  28. val ripple = LocalRippleTheme.current
  29. val rippleAlpha = ripple.rippleAlpha().pressedAlpha
  30. val rippleColor = ripple.defaultColor().copy(alpha = rippleAlpha)
  31. val nameFocusRequester = remember { FocusRequester() }
  32. val dateFocusRequester = remember { FocusRequester() }
  33. OutlinedTextField(
  34. value = name.field,
  35. onValueChange = { name.field = it },
  36. modifier = Modifier
  37. .fillMaxWidth()
  38. .focusRequester(nameFocusRequester),
  39. textStyle = textStyle,
  40. placeholder = { Text("Title", Modifier.fillMaxWidth(), style = textStyle) },
  41. isError = !isNameValid,
  42. keyboardOptions = KeyboardOptions(KeyboardCapitalization.Sentences),
  43. maxLines = 2,
  44. colors = TextFieldDefaults.outlinedTextFieldColors(backgroundColor = rippleColor),
  45. )
  46. OutlinedTextField(
  47. value = date.value,
  48. onValueChange = onDateChange,
  49. modifier = Modifier
  50. .fillMaxWidth()
  51. .focusRequester(dateFocusRequester),
  52. textStyle = textStyle,
  53. placeholder = { Text("YYYY-MM-DD", Modifier.fillMaxWidth(), style = textStyle) },
  54. isError = !isDateValid,
  55. visualTransformation = { DateField(it.text).getVisualTransformation() },
  56. keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number),
  57. singleLine = true,
  58. colors = TextFieldDefaults.outlinedTextFieldColors(backgroundColor = rippleColor),
  59. )
  60. LaunchedEffect(Unit) {
  61. when (autofocus) {
  62. Autofocus.NAME -> nameFocusRequester
  63. Autofocus.DATE -> dateFocusRequester
  64. null -> null
  65. }?.requestFocus()
  66. }
  67. }