Skip to content

Commit c24d801

Browse files
committed
Add rich text to control item demos
1 parent 8cf0572 commit c24d801

7 files changed

Lines changed: 152 additions & 28 deletions

File tree

app/src/main/java/com/orange/ouds/app/ui/components/ComponentCode.kt

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ import com.orange.ouds.app.ui.utilities.Code
2222
import com.orange.ouds.app.ui.utilities.FunctionCall
2323
import com.orange.ouds.core.component.OudsColoredBoxColor
2424
import com.orange.ouds.core.component.common.OudsError
25+
import com.orange.ouds.core.component.common.text.OudsAnnotatedErrorMessage
2526
import com.orange.ouds.core.component.common.text.OudsAnnotatedString
2627
import com.orange.ouds.core.component.common.text.OudsLinkAnnotation
2728
import kotlin.reflect.full.isSubclassOf
@@ -124,9 +125,17 @@ fun FunctionCall.Builder.contentDescriptionArgument(@PluralsRes resId: Int, coun
124125

125126
fun FunctionCall.Builder.enabledArgument(value: Boolean) = typedArgument(Argument.Enabled, value)
126127

127-
fun FunctionCall.Builder.errorArgument(message: String) {
128+
fun FunctionCall.Builder.errorArgument(message: String, annotatedMessage: Boolean = false, appendAnnotatedDemoText: Boolean = annotatedMessage) {
128129
constructorCallArgument<OudsError>(Argument.Error) {
129-
typedArgument("message", message)
130+
if (annotatedMessage) {
131+
annotatedStringArgument<OudsAnnotatedErrorMessage, OudsAnnotatedErrorMessage.Builder>(
132+
name = "message",
133+
text = message,
134+
appendAnnotatedDemoText = appendAnnotatedDemoText
135+
)
136+
} else {
137+
typedArgument("message", message)
138+
}
130139
}
131140
}
132141

app/src/main/java/com/orange/ouds/app/ui/components/checkbox/CheckboxItemDemoScreen.kt

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import androidx.compose.ui.res.painterResource
2121
import androidx.compose.ui.tooling.preview.PreviewLightDark
2222
import com.orange.ouds.app.ui.components.controlitem.ControlItemCustomizations
2323
import com.orange.ouds.app.ui.components.controlitem.controlItemArguments
24+
import com.orange.ouds.app.ui.components.controlitem.controlItemError
2425
import com.orange.ouds.app.ui.components.onClickArgument
2526
import com.orange.ouds.app.ui.utilities.Code
2627
import com.orange.ouds.app.ui.utilities.LocalThemeDrawableResources
@@ -30,7 +31,6 @@ import com.orange.ouds.app.ui.utilities.composable.DemoScreen
3031
import com.orange.ouds.core.component.OudsCheckboxItem
3132
import com.orange.ouds.core.component.OudsControlItemIcon
3233
import com.orange.ouds.core.component.OudsTriStateCheckboxItem
33-
import com.orange.ouds.core.component.common.OudsError
3434
import com.orange.ouds.core.theme.OudsTheme
3535
import com.orange.ouds.theme.OudsVersion
3636

@@ -78,7 +78,7 @@ private fun CheckboxItemDemoContent(state: CheckboxItemDemoState) {
7878
reversed = reversed,
7979
enabled = enabled,
8080
readOnly = readOnly,
81-
error = if (error) OudsError(if (isLastItem) errorMessage else "") else null,
81+
error = controlItemError(this, isLastItem),
8282
constrainedMaxWidth = constrainedMaxWidth
8383
)
8484
}
@@ -113,7 +113,7 @@ private fun IndeterminateCheckboxItemDemoContent(state: CheckboxItemDemoState) {
113113
reversed = reversed,
114114
enabled = enabled,
115115
readOnly = readOnly,
116-
error = if (error) OudsError(if (isLastItem) errorMessage else "") else null,
116+
error = controlItemError(this, isLastItem),
117117
constrainedMaxWidth = constrainedMaxWidth
118118
)
119119
}
@@ -131,21 +131,24 @@ private fun CheckboxItemDemoColumn(edgeToEdge: Boolean, content: @Composable ()
131131
private fun Code.Builder.checkboxItemDemoCodeSnippet(state: CheckboxItemDemoState, indeterminate: Boolean, themeDrawableResources: ThemeDrawableResources) {
132132
val functionName = if (indeterminate) "OudsTriStateCheckboxItem" else "OudsCheckboxItem"
133133
val lambdaCommentText = "Change state"
134-
comment("First checkbox item")
135134
with(state) {
136-
functionCall(functionName) {
137-
if (indeterminate) {
138-
typedArgument("state", toggleableStateValues.first)
139-
onClickArgument {
140-
comment(lambdaCommentText)
141-
}
142-
} else {
143-
typedArgument("checked", checkedValues.first)
144-
lambdaArgument("onCheckedChange") {
145-
comment(lambdaCommentText)
135+
repeat(CheckboxIdentifier.entries.count()) { index ->
136+
functionCall(functionName) {
137+
if (indeterminate) {
138+
val value = if (index == 0) toggleableStateValues.first else toggleableStateValues.second
139+
typedArgument("state", value)
140+
onClickArgument {
141+
comment(lambdaCommentText)
142+
}
143+
} else {
144+
val value = if (index == 0) checkedValues.first else checkedValues.second
145+
typedArgument("checked", value)
146+
lambdaArgument("onCheckedChange") {
147+
comment(lambdaCommentText)
148+
}
146149
}
150+
controlItemArguments(state, themeDrawableResources, index == CheckboxIdentifier.entries.lastIndex)
147151
}
148-
controlItemArguments(state, themeDrawableResources)
149152
}
150153
}
151154
}

app/src/main/java/com/orange/ouds/app/ui/components/checkbox/CheckboxItemDemoState.kt

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ fun rememberCheckboxItemDemoState(
3838
readOnly: Boolean = false,
3939
error: Boolean = false,
4040
errorMessage: String = stringResource(id = R.string.app_components_common_errorMessage_label),
41+
annotatedErrorMessage: Boolean = false,
4142
label: String = stringResource(id = R.string.app_components_common_label_label),
4243
description: String? = null,
4344
constrainedMaxWidth: Boolean = false
@@ -52,6 +53,7 @@ fun rememberCheckboxItemDemoState(
5253
readOnly,
5354
error,
5455
errorMessage,
56+
annotatedErrorMessage,
5557
label,
5658
description,
5759
constrainedMaxWidth,
@@ -68,6 +70,7 @@ fun rememberCheckboxItemDemoState(
6870
readOnly,
6971
error,
7072
errorMessage,
73+
annotatedErrorMessage,
7174
label,
7275
description,
7376
constrainedMaxWidth
@@ -85,10 +88,24 @@ class CheckboxItemDemoState(
8588
readOnly: Boolean,
8689
error: Boolean,
8790
errorMessage: String,
91+
annotatedErrorMessage: Boolean,
8892
label: String,
8993
description: String?,
9094
constrainedMaxWidth: Boolean
91-
) : ControlItemDemoState(icon, edgeToEdge, divider, reversed, enabled, readOnly, error, errorMessage, label, description, constrainedMaxWidth) {
95+
) : ControlItemDemoState(
96+
icon,
97+
edgeToEdge,
98+
divider,
99+
reversed,
100+
enabled,
101+
readOnly,
102+
error,
103+
errorMessage,
104+
annotatedErrorMessage,
105+
label,
106+
description,
107+
constrainedMaxWidth
108+
) {
92109

93110
companion object {
94111
val Saver = listSaver(
@@ -114,6 +131,7 @@ class CheckboxItemDemoState(
114131
readOnly,
115132
error,
116133
errorMessage,
134+
annotatedErrorMessage,
117135
label,
118136
description,
119137
constrainedMaxWidth

app/src/main/java/com/orange/ouds/app/ui/components/controlitem/ControlItemDemoScreen.kt

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
package com.orange.ouds.app.ui.components.controlitem
1414

1515
import androidx.compose.runtime.Composable
16+
import androidx.compose.ui.platform.LocalContext
1617
import androidx.compose.ui.res.stringResource
1718
import com.orange.ouds.app.R
1819
import com.orange.ouds.app.ui.components.constrainedMaxWidthArgument
@@ -23,9 +24,13 @@ import com.orange.ouds.app.ui.components.painterArgument
2324
import com.orange.ouds.app.ui.components.readOnlyArgument
2425
import com.orange.ouds.app.ui.utilities.FunctionCall
2526
import com.orange.ouds.app.ui.utilities.ThemeDrawableResources
27+
import com.orange.ouds.app.ui.utilities.annotatedStringResource
28+
import com.orange.ouds.app.ui.utilities.appendAnnotatedDemoText
2629
import com.orange.ouds.app.ui.utilities.composable.CustomizationSwitchItem
2730
import com.orange.ouds.app.ui.utilities.composable.CustomizationTextInput
2831
import com.orange.ouds.core.component.OudsControlItemIcon
32+
import com.orange.ouds.core.component.common.OudsError
33+
import com.orange.ouds.core.component.common.text.buildOudsAnnotatedErrorMessage
2934

3035
data class ControlItemCustomization(val index: Int, val content: @Composable () -> Unit)
3136

@@ -42,6 +47,7 @@ fun ControlItemCustomizations(state: ControlItemDemoState, extraCustomizations:
4247
{ ControlItemReadOnlyCustomization(state = state) },
4348
{ ControlItemErrorCustomization(state = state) },
4449
{ ControlItemErrorMessageCustomization(state = state) },
50+
{ ControlItemAnnotatedErrorMessageCustomization(state = state) },
4551
{ ControlItemLabelCustomization(state = state) },
4652
{ ControlItemDescriptionCustomization(state = state) },
4753
{ ControlItemConstrainedMaxWidthCustomization(state = state) }
@@ -146,6 +152,18 @@ private fun ControlItemErrorMessageCustomization(state: ControlItemDemoState) {
146152
}
147153
}
148154

155+
@Composable
156+
fun ControlItemAnnotatedErrorMessageCustomization(state: ControlItemDemoState) {
157+
with(state) {
158+
CustomizationSwitchItem(
159+
label = annotatedStringResource(R.string.app_components_common_errorMessage_tech),
160+
checked = annotatedErrorMessage,
161+
onCheckedChange = { annotatedErrorMessage = it },
162+
enabled = annotatedErrorMessageSwitchEnabled
163+
)
164+
}
165+
}
166+
149167
@Composable
150168
private fun ControlItemLabelCustomization(state: ControlItemDemoState) {
151169
with(state) {
@@ -181,6 +199,21 @@ private fun ControlItemConstrainedMaxWidthCustomization(state: ControlItemDemoSt
181199
}
182200
}
183201

202+
@Composable
203+
fun controlItemError(state: ControlItemDemoState, isLastItem: Boolean): OudsError? {
204+
val context = LocalContext.current
205+
return with(state) {
206+
when {
207+
error && !isLastItem -> OudsError("")
208+
error && !annotatedErrorMessage -> OudsError(errorMessage)
209+
error && annotatedErrorMessage -> OudsError(buildOudsAnnotatedErrorMessage {
210+
appendAnnotatedDemoText(context, errorMessage)
211+
})
212+
else -> null
213+
}
214+
}
215+
}
216+
184217
fun FunctionCall.Builder.controlItemArguments(state: ControlItemDemoState, themeDrawableResources: ThemeDrawableResources, hasErrorMessage: Boolean = false) =
185218
with(state) {
186219
labelArgument(label)
@@ -195,6 +228,11 @@ fun FunctionCall.Builder.controlItemArguments(state: ControlItemDemoState, theme
195228
if (reversed) typedArgument("reversed", reversed)
196229
if (!enabled) enabledArgument(enabled)
197230
if (readOnly) readOnlyArgument(readOnly)
198-
if (error) errorArgument(if (hasErrorMessage) errorMessage else "")
231+
if (error) {
232+
errorArgument(
233+
message = if (hasErrorMessage) errorMessage else "",
234+
annotatedMessage = hasErrorMessage && annotatedErrorMessage
235+
)
236+
}
199237
if (constrainedMaxWidth) constrainedMaxWidthArgument(constrainedMaxWidth)
200238
}

app/src/main/java/com/orange/ouds/app/ui/components/controlitem/ControlItemDemoState.kt

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ open class ControlItemDemoState(
2626
readOnly: Boolean,
2727
error: Boolean,
2828
errorMessage: String,
29+
annotatedErrorMessage: Boolean,
2930
label: String,
3031
description: String?,
3132
constrainedMaxWidth: Boolean
@@ -45,6 +46,7 @@ open class ControlItemDemoState(
4546
readOnly,
4647
error,
4748
errorMessage,
49+
annotatedErrorMessage,
4850
label,
4951
description,
5052
constrainedMaxWidth
@@ -61,9 +63,10 @@ open class ControlItemDemoState(
6163
list[5] as Boolean,
6264
list[6] as Boolean,
6365
list[7] as String,
64-
list[8] as String,
65-
list[9] as String?,
66-
list[10] as Boolean
66+
list[8] as Boolean,
67+
list[9] as String,
68+
list[10] as String?,
69+
list[11] as Boolean
6770
)
6871
}
6972
)
@@ -78,6 +81,7 @@ open class ControlItemDemoState(
7881
var readOnly: Boolean by mutableStateOf(readOnly)
7982
var error: Boolean by mutableStateOf(error)
8083
var errorMessage: String by mutableStateOf(errorMessage)
84+
var annotatedErrorMessage: Boolean by mutableStateOf(annotatedErrorMessage)
8185
var label: String by mutableStateOf(label)
8286
var description: String? by mutableStateOf(description)
8387

@@ -92,4 +96,7 @@ open class ControlItemDemoState(
9296

9397
val errorMessageTextInputEnabled: Boolean
9498
get() = error
99+
100+
val annotatedErrorMessageSwitchEnabled: Boolean
101+
get() = error
95102
}

app/src/main/java/com/orange/ouds/app/ui/components/radiobutton/RadioButtonItemDemoState.kt

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ fun rememberRadioButtonItemDemoState(
3535
readOnly: Boolean = false,
3636
error: Boolean = false,
3737
errorMessage: String = stringResource(id = R.string.app_components_common_errorMessage_label),
38+
annotatedErrorMessage: Boolean = false,
3839
label: String = stringResource(id = R.string.app_components_common_label_label),
3940
extraLabel: String? = null,
4041
description: String? = null,
@@ -50,6 +51,7 @@ fun rememberRadioButtonItemDemoState(
5051
readOnly,
5152
error,
5253
errorMessage,
54+
annotatedErrorMessage,
5355
label,
5456
extraLabel,
5557
description,
@@ -67,6 +69,7 @@ fun rememberRadioButtonItemDemoState(
6769
readOnly,
6870
error,
6971
errorMessage,
72+
annotatedErrorMessage,
7073
label,
7174
extraLabel,
7275
description,
@@ -85,11 +88,25 @@ class RadioButtonItemDemoState(
8588
readOnly: Boolean,
8689
error: Boolean,
8790
errorMessage: String,
91+
annotatedErrorMessage: Boolean,
8892
label: String,
8993
extraLabel: String?,
9094
description: String?,
9195
constrainedMaxWidth: Boolean,
92-
) : ControlItemDemoState(icon, edgeToEdge, divider, reversed, enabled, readOnly, error, errorMessage, label, description, constrainedMaxWidth) {
96+
) : ControlItemDemoState(
97+
icon,
98+
edgeToEdge,
99+
divider,
100+
reversed,
101+
enabled,
102+
readOnly,
103+
error,
104+
errorMessage,
105+
annotatedErrorMessage,
106+
label,
107+
description,
108+
constrainedMaxWidth
109+
) {
93110

94111
companion object {
95112
val values = listOf(1, 2)
@@ -118,6 +135,7 @@ class RadioButtonItemDemoState(
118135
readOnly,
119136
error,
120137
errorMessage,
138+
annotatedErrorMessage,
121139
label,
122140
list[2] as String?,
123141
description,

0 commit comments

Comments
 (0)