diff --git a/spark-screenshot-testing/src/test/kotlin/com/adevinta/spark/textfields/TextFieldScreenshot.kt b/spark-screenshot-testing/src/test/kotlin/com/adevinta/spark/textfields/TextFieldScreenshot.kt index 1614e4613..d9f9a3ac7 100644 --- a/spark-screenshot-testing/src/test/kotlin/com/adevinta/spark/textfields/TextFieldScreenshot.kt +++ b/spark-screenshot-testing/src/test/kotlin/com/adevinta/spark/textfields/TextFieldScreenshot.kt @@ -35,6 +35,7 @@ import com.adevinta.spark.ExperimentalSparkApi import com.adevinta.spark.components.icons.Icon import com.adevinta.spark.components.textfields.AddonScope import com.adevinta.spark.components.textfields.TextField +import com.adevinta.spark.components.textfields.TextFieldCharacterCounter import com.adevinta.spark.components.textfields.TextFieldState import com.adevinta.spark.icons.Check import com.adevinta.spark.icons.SparkIcon @@ -148,6 +149,85 @@ internal class TextFieldScreenshot { } } + @OptIn(ExperimentalLayoutApi::class) + @Test + fun helperMessage() { + paparazzi.sparkSnapshot { + FlowColumn( + modifier = Modifier.padding(8.dp), + verticalArrangement = Arrangement.spacedBy(8.dp), + horizontalArrangement = Arrangement.spacedBy(8.dp), + ) { + // With no helper, status message or char counter + TextField( + value = "value", + onValueChange = {}, + label = "Label", + ) + // With helper, but no status message or char counter + TextField( + value = "value", + onValueChange = {}, + label = "Label", + helper = "helper", + ) + // With helper, status message but no char counter + TextField( + value = "value", + onValueChange = {}, + label = "Label", + helper = "helper", + state = TextFieldState.Error, + stateMessage = "state message", + ) + // With helper, status message & char counter + TextField( + value = "value", + onValueChange = {}, + label = "Label", + helper = "helper", + state = TextFieldState.Error, + stateMessage = "state message", + ) + // With no helper, status message but with char counter + TextField( + value = "value", + onValueChange = {}, + label = "Label", + counter = TextFieldCharacterCounter(10, 50), + ) + // With helper, char counter but no status message + TextField( + value = "value", + onValueChange = {}, + label = "Label", + helper = "helper", + counter = TextFieldCharacterCounter(10, 50), + ) + // With helper, status message but no char counter + TextField( + value = "value", + onValueChange = {}, + label = "Label", + helper = "helper", + state = TextFieldState.Error, + stateMessage = "state message", + counter = TextFieldCharacterCounter(10, 50), + ) + // With helper, status message & char counter + TextField( + value = "value", + onValueChange = {}, + label = "Label", + helper = "helper", + state = TextFieldState.Error, + stateMessage = "state message", + counter = TextFieldCharacterCounter(10, 50), + ) + } + } + } + @OptIn(ExperimentalSparkApi::class) @Composable private fun TextFields( diff --git a/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_MultilineTextFieldScreenshot_showcase__dark.png b/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_MultilineTextFieldScreenshot_showcase__dark.png index d2aede36f..3f913e098 100644 --- a/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_MultilineTextFieldScreenshot_showcase__dark.png +++ b/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_MultilineTextFieldScreenshot_showcase__dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:64ceaa22e0bf4398cc7d286682b583e9f2a98da30cf2c9d56235a122b107b2ab -size 93830 +oid sha256:248b0e4ea09105a4c7fc86258b871941f020c4b0675b963c9fa5214d44dd62b5 +size 106672 diff --git a/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_MultilineTextFieldScreenshot_showcase__light.png b/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_MultilineTextFieldScreenshot_showcase__light.png index f7ca55659..02a678059 100644 --- a/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_MultilineTextFieldScreenshot_showcase__light.png +++ b/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_MultilineTextFieldScreenshot_showcase__light.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:90573361d233bf338062538b60fd766baddf60041466f72caabc4e927b6034fa -size 93307 +oid sha256:4748f1c307910cc239ca2d132ccd835e88895306e0a1149408f029213cb113b2 +size 105534 diff --git a/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_MultilineTextFieldScreenshot_showcase_disabled__dark.png b/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_MultilineTextFieldScreenshot_showcase_disabled__dark.png index c7f89b8c7..2881c771c 100644 --- a/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_MultilineTextFieldScreenshot_showcase_disabled__dark.png +++ b/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_MultilineTextFieldScreenshot_showcase_disabled__dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:0e99aa5626f2d76aedec90f496e08fed67c64b022ebce1e1b7793d88bdaefa21 -size 70876 +oid sha256:f4b481eafb20cdc24241527bd24802cd642649c1ced076468cc4fb8402f97ddd +size 87222 diff --git a/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_MultilineTextFieldScreenshot_showcase_disabled__light.png b/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_MultilineTextFieldScreenshot_showcase_disabled__light.png index 9cf74f87f..40e778f8d 100644 --- a/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_MultilineTextFieldScreenshot_showcase_disabled__light.png +++ b/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_MultilineTextFieldScreenshot_showcase_disabled__light.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:44701c4e8abcebaf85a682cbcf4ba4dbdb0fff2b9e53e29248d38e7c964f85ad -size 67632 +oid sha256:5bf4414287590e1140989e6f70b62d73f250b66451fc6b4ed11206afd1968736 +size 82823 diff --git a/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldDocScreenshot_multilineTextFieldShowcase__dark.png b/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldDocScreenshot_multilineTextFieldShowcase__dark.png index caf38eb8a..b6e3d5619 100644 --- a/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldDocScreenshot_multilineTextFieldShowcase__dark.png +++ b/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldDocScreenshot_multilineTextFieldShowcase__dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:223f6ddb92b52c9d48ad671acce35f733ed4230859550a7d01b723ce24cf0870 -size 97185 +oid sha256:62b3c7584449648a04b28aa64bf89d5c0bb5da157b6a0a815153315468c692e7 +size 109544 diff --git a/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldDocScreenshot_multilineTextFieldShowcase__light.png b/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldDocScreenshot_multilineTextFieldShowcase__light.png index 5cbd0b464..a18e5d22c 100644 --- a/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldDocScreenshot_multilineTextFieldShowcase__light.png +++ b/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldDocScreenshot_multilineTextFieldShowcase__light.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:47bd0e52ef3d374bf680988a3131fed10937333e97d228eba032ed0104b6589d -size 97330 +oid sha256:d08d0e89dbec1a3acf5254ab96408a4662cad904c48917906d0248099b8cd549 +size 109475 diff --git a/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldDocScreenshot_selectTextFieldShowcase__dark.png b/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldDocScreenshot_selectTextFieldShowcase__dark.png index 167b4eb9c..899cb5c09 100644 --- a/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldDocScreenshot_selectTextFieldShowcase__dark.png +++ b/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldDocScreenshot_selectTextFieldShowcase__dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:c013dca92d7a6612f87b2b0c4ce3a234a33746b5fbd460c56262752e035a8374 -size 89944 +oid sha256:ad3e1dd7a5d24b11e6e6faa762efa22b4da8fd5ebc48d4bbe3c09847c7d9669c +size 102613 diff --git a/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldDocScreenshot_selectTextFieldShowcase__light.png b/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldDocScreenshot_selectTextFieldShowcase__light.png index d92a0cf1a..43e3edc34 100644 --- a/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldDocScreenshot_selectTextFieldShowcase__light.png +++ b/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldDocScreenshot_selectTextFieldShowcase__light.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:58636d994865fb9f2e2d230057f3b61a9d3b37933b8263cfc867b0396ecee08b -size 87501 +oid sha256:763920f6db5bda9985a3bb563786496e29afb0ca12fe26f971713645c19f3764 +size 100421 diff --git a/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldDocScreenshot_textFieldShowcase__dark.png b/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldDocScreenshot_textFieldShowcase__dark.png index acfcfce87..75a681b89 100644 --- a/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldDocScreenshot_textFieldShowcase__dark.png +++ b/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldDocScreenshot_textFieldShowcase__dark.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:11e5d61739d7392dbde24972810248e8bdbbe71c06552149087dea32ab46ab6a -size 89934 +oid sha256:9f531e0f88b80d6603f044f2729e0c72592e2e510cdd190ad1a99a81cc2d0d9f +size 102135 diff --git a/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldDocScreenshot_textFieldShowcase__light.png b/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldDocScreenshot_textFieldShowcase__light.png index 5b0a9b66c..b55215c6f 100644 --- a/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldDocScreenshot_textFieldShowcase__light.png +++ b/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldDocScreenshot_textFieldShowcase__light.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5590abb9e0128e5deb034d939f17bb4815ed33dce4c2a3f990e70f1e602a4c61 -size 88379 +oid sha256:faeb0c06406404b39323a02347c5af5964cf7f64d1309cd61aeeaa7a7f7453a9 +size 100645 diff --git a/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldScreenshot_bigValue.png b/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldScreenshot_bigValue.png index cbd02a8fd..d5eb16bee 100644 --- a/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldScreenshot_bigValue.png +++ b/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldScreenshot_bigValue.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:477e9a15bc97e855fc818485e1240ac89bae54bbac122799fce69119f0eb87d5 -size 139517 +oid sha256:5dfee7008ca3ec4fe33af9706bb19d6a3742078a46d6fdc3e3bb0afde8b86408 +size 140075 diff --git a/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldScreenshot_disabled.png b/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldScreenshot_disabled.png index ba8e219d3..a63f32812 100644 --- a/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldScreenshot_disabled.png +++ b/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldScreenshot_disabled.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:b4d7dcb36f8032d55bbe83dbf1206378edca308a6f7e3c81437c41a951c2d646 -size 142728 +oid sha256:18c1fb04449ad63f01586325af8690a9879fc35333290b825be65c807754b375 +size 144739 diff --git a/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldScreenshot_enabled.png b/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldScreenshot_enabled.png index 2128fae4e..2c3fec347 100644 --- a/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldScreenshot_enabled.png +++ b/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldScreenshot_enabled.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:5ce35bb38c6d9a8c270510d99f0805b91d9a8f73e736b244651fd6d39dc0b0bc -size 156080 +oid sha256:56628ff4658a74d6531870594f4bb0b5d998b8f9daa9c1f623c7f7de3ed15e53 +size 157927 diff --git a/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldScreenshot_helperMessage.png b/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldScreenshot_helperMessage.png new file mode 100644 index 000000000..b905684c8 --- /dev/null +++ b/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldScreenshot_helperMessage.png @@ -0,0 +1,3 @@ +version https://git-lfs.github.com/spec/v1 +oid sha256:3cbe272861e338fb5e3905cc83195f181fbe0dac31efd0b7bf9fdb66b1aed463 +size 80002 diff --git a/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldScreenshot_smallValue.png b/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldScreenshot_smallValue.png index 9018aa27e..5b4d461da 100644 --- a/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldScreenshot_smallValue.png +++ b/spark-screenshot-testing/src/test/snapshots/images/com.adevinta.spark.textfields_TextFieldScreenshot_smallValue.png @@ -1,3 +1,3 @@ version https://git-lfs.github.com/spec/v1 -oid sha256:06fee3cbf1cbd5bf363ca3d43de9f0da7a830228dee78e0ac423d31a6d5f8cd9 -size 186955 +oid sha256:4a43b24cd6c7720e7e10cda6f2a00b91b33e8681383c8b06726218a5fa16980e +size 188549 diff --git a/spark/src/main/kotlin/com/adevinta/spark/components/textfields/MultilineTextField.kt b/spark/src/main/kotlin/com/adevinta/spark/components/textfields/MultilineTextField.kt index 88fed89ee..a75dc61ee 100644 --- a/spark/src/main/kotlin/com/adevinta/spark/components/textfields/MultilineTextField.kt +++ b/spark/src/main/kotlin/com/adevinta/spark/components/textfields/MultilineTextField.kt @@ -342,6 +342,7 @@ private fun ColumnScope.PreviewTextFields( enabled = true, state = state, stateMessage = stateMessage, + counter = TextFieldCharacterCounter(0, 300), required = true, label = "Label", placeholder = "Placeholder", diff --git a/spark/src/main/kotlin/com/adevinta/spark/components/textfields/SparkTextField.kt b/spark/src/main/kotlin/com/adevinta/spark/components/textfields/SparkTextField.kt index db13cb0ca..3fa24eadf 100644 --- a/spark/src/main/kotlin/com/adevinta/spark/components/textfields/SparkTextField.kt +++ b/spark/src/main/kotlin/com/adevinta/spark/components/textfields/SparkTextField.kt @@ -322,7 +322,7 @@ private fun OutlinedBorderContainerBox( @Composable private fun SupportingText( - text: String, + text: String?, counterComposable: @Composable ((Modifier) -> Unit)?, statusIcon: @Composable ((Modifier) -> Unit)?, ) { @@ -333,7 +333,7 @@ private fun SupportingText( statusIcon?.invoke(Modifier.padding(end = 4.dp)) Text( modifier = Modifier.weight(1f, fill = true), - text = text, + text = text.orEmpty(), ) counterComposable?.invoke(Modifier.padding(start = 8.dp)) } @@ -433,18 +433,14 @@ private fun supportText( stateMessage: String?, counterComposable: @Composable ((Modifier) -> Unit)?, stateIcon: @Composable ((Modifier) -> Unit)?, -): (@Composable () -> Unit)? = if (stateMessage != null && state != null) { - { - SupportingText( - text = stateMessage, - counterComposable = counterComposable, - statusIcon = stateIcon, - ) - } -} else if (helper != null) { +): (@Composable () -> Unit)? = if ( + (stateMessage != null && state != null) || helper != null || counterComposable != null +) { { + // Prioritize the state message if there's one and fallback to the helper otherwise + val message = state?.let { stateMessage } ?: helper SupportingText( - text = helper, + text = message, counterComposable = counterComposable, statusIcon = stateIcon, ) @@ -461,7 +457,7 @@ internal object TextFieldDefault { return { modifier -> Icon( - modifier = modifier.size(16.dp), + modifier = modifier.size(18.dp), sparkIcon = state.icon, contentDescription = null, )