Browse Source

moved edit form to separate function

sirekanian 3 years ago
parent
commit
8065c72255

+ 65 - 0
app/src/main/java/com/sirekanian/spacetime/ui/EditForm.kt

@@ -0,0 +1,65 @@
+package com.sirekanian.spacetime.ui
+
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.text.KeyboardOptions
+import androidx.compose.material.OutlinedTextField
+import androidx.compose.material.Text
+import androidx.compose.material.TextFieldDefaults
+import androidx.compose.material.ripple.LocalRippleTheme
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.runtime.remember
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.focus.FocusRequester
+import androidx.compose.ui.focus.focusRequester
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.input.KeyboardType
+import com.sirekanian.spacetime.model.EditablePage.Autofocus
+
+@Composable
+fun EditForm(
+    name: NameField,
+    date: DateField,
+    onDateChange: (String) -> Unit,
+    isDateValid: Boolean,
+    autofocus: Autofocus?,
+    textStyle: TextStyle,
+) {
+    val ripple = LocalRippleTheme.current
+    val rippleAlpha = ripple.rippleAlpha().pressedAlpha
+    val rippleColor = ripple.defaultColor().copy(alpha = rippleAlpha)
+    val nameFocusRequester = remember { FocusRequester() }
+    val dateFocusRequester = remember { FocusRequester() }
+    OutlinedTextField(
+        value = name.field,
+        onValueChange = { name.field = it },
+        modifier = Modifier
+            .fillMaxWidth()
+            .focusRequester(nameFocusRequester),
+        textStyle = textStyle,
+        placeholder = { Text("Title", Modifier.fillMaxWidth(), style = textStyle) },
+        maxLines = 2,
+        colors = TextFieldDefaults.outlinedTextFieldColors(backgroundColor = rippleColor),
+    )
+    OutlinedTextField(
+        value = date.value,
+        onValueChange = onDateChange,
+        modifier = Modifier
+            .fillMaxWidth()
+            .focusRequester(dateFocusRequester),
+        textStyle = textStyle,
+        placeholder = { Text("YYYY-MM-DD", Modifier.fillMaxWidth(), style = textStyle) },
+        isError = !isDateValid,
+        visualTransformation = { DateField(it.text).getVisualTransformation() },
+        keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number),
+        singleLine = true,
+        colors = TextFieldDefaults.outlinedTextFieldColors(backgroundColor = rippleColor),
+    )
+    LaunchedEffect(Unit) {
+        when (autofocus) {
+            Autofocus.NAME -> nameFocusRequester
+            Autofocus.DATE -> dateFocusRequester
+            null -> null
+        }?.requestFocus()
+    }
+}

+ 6 - 40
app/src/main/java/com/sirekanian/spacetime/ui/ImagePageContent.kt

@@ -6,27 +6,22 @@ import androidx.compose.animation.core.animateFloatAsState
 import androidx.compose.foundation.ExperimentalFoundationApi
 import androidx.compose.foundation.combinedClickable
 import androidx.compose.foundation.layout.*
-import androidx.compose.foundation.text.KeyboardOptions
 import androidx.compose.material.*
 import androidx.compose.material.icons.Icons
 import androidx.compose.material.icons.filled.Close
 import androidx.compose.material.icons.filled.Done
-import androidx.compose.material.ripple.LocalRippleTheme
 import androidx.compose.runtime.*
 import androidx.compose.ui.Alignment
 import androidx.compose.ui.ExperimentalComposeUiApi
 import androidx.compose.ui.Modifier
 import androidx.compose.ui.draw.blur
 import androidx.compose.ui.draw.clip
-import androidx.compose.ui.focus.FocusRequester
-import androidx.compose.ui.focus.focusRequester
 import androidx.compose.ui.hapticfeedback.HapticFeedbackType
 import androidx.compose.ui.layout.ContentScale
 import androidx.compose.ui.platform.LocalContext
 import androidx.compose.ui.platform.LocalHapticFeedback
 import androidx.compose.ui.res.pluralStringResource
 import androidx.compose.ui.res.stringResource
-import androidx.compose.ui.text.input.KeyboardType
 import androidx.compose.ui.text.style.TextAlign
 import androidx.compose.ui.text.style.TextOverflow
 import androidx.compose.ui.unit.dp
@@ -116,43 +111,14 @@ fun ImagePageContent(
         topSpaceWeight.let { weight -> if (weight > 0) Spacer(Modifier.weight(weight)) }
         val textStyle = MaterialTheme.typography.h2.copy(textAlign = TextAlign.Center)
         if (isEditMode) {
-            val ripple = LocalRippleTheme.current
-            val rippleAlpha = ripple.rippleAlpha().pressedAlpha
-            val rippleColor = ripple.defaultColor().copy(alpha = rippleAlpha)
-            val nameFocusRequester = remember { FocusRequester() }
-            val dateFocusRequester = remember { FocusRequester() }
-            OutlinedTextField(
-                value = name.field,
-                onValueChange = { name.field = it },
-                modifier = Modifier
-                    .fillMaxWidth()
-                    .focusRequester(nameFocusRequester),
-                textStyle = textStyle,
-                placeholder = { Text("Title", Modifier.fillMaxWidth(), style = textStyle) },
-                maxLines = 2,
-                colors = TextFieldDefaults.outlinedTextFieldColors(backgroundColor = rippleColor),
-            )
-            OutlinedTextField(
-                value = date.value,
-                onValueChange = { date = DateField(it) },
-                modifier = Modifier
-                    .fillMaxWidth()
-                    .focusRequester(dateFocusRequester),
+            EditForm(
+                name = name,
+                date = date,
+                onDateChange = { date = DateField(it) },
+                isDateValid = isDateValid,
+                autofocus = state.editablePage?.autofocus,
                 textStyle = textStyle,
-                placeholder = { Text("YYYY-MM-DD", Modifier.fillMaxWidth(), style = textStyle) },
-                isError = !isDateValid,
-                visualTransformation = { DateField(it.text).getVisualTransformation() },
-                keyboardOptions = KeyboardOptions(keyboardType = KeyboardType.Number),
-                singleLine = true,
-                colors = TextFieldDefaults.outlinedTextFieldColors(backgroundColor = rippleColor),
             )
-            LaunchedEffect(Unit) {
-                when (state.editablePage?.autofocus) {
-                    Autofocus.NAME -> nameFocusRequester
-                    Autofocus.DATE -> dateFocusRequester
-                    null -> null
-                }?.requestFocus()
-            }
         } else {
             val haptic = LocalHapticFeedback.current
             Text(