Skip to content

Commit 3f6c3f7

Browse files
florentmaitrepaulinea
authored andcommitted
Refactor preview parameters for all list and card items
1 parent 10a8a88 commit 3f6c3f7

37 files changed

Lines changed: 136 additions & 207 deletions

File tree

core/src/main/java/com/orange/ouds/core/component/OudsCardItem.kt

Lines changed: 14 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -16,14 +16,11 @@ import android.content.res.Configuration.UI_MODE_NIGHT_YES
1616
import android.content.res.Configuration.UI_MODE_TYPE_NORMAL
1717
import androidx.compose.foundation.interaction.MutableInteractionSource
1818
import androidx.compose.foundation.isSystemInDarkTheme
19-
import androidx.compose.material.icons.Icons
20-
import androidx.compose.material.icons.outlined.FavoriteBorder
2119
import androidx.compose.runtime.Composable
2220
import androidx.compose.runtime.remember
2321
import androidx.compose.ui.Modifier
2422
import androidx.compose.ui.tooling.preview.Preview
2523
import androidx.compose.ui.tooling.preview.PreviewParameter
26-
import com.orange.ouds.core.utilities.CheckerboardPainter
2724
import com.orange.ouds.core.utilities.OudsPreview
2825
import com.orange.ouds.core.utilities.OudsPreviewDevice
2926
import com.orange.ouds.core.utilities.OudsPreviewLightDark
@@ -32,7 +29,6 @@ import com.orange.ouds.core.utilities.PreviewEnumEntries
3229
import com.orange.ouds.core.utilities.getPreviewTheme
3330
import com.orange.ouds.core.utilities.mapSettings
3431
import com.orange.ouds.foundation.ExperimentalOudsApi
35-
import com.orange.ouds.foundation.utilities.BasicPreviewParameterProvider
3632
import com.orange.ouds.theme.OudsThemeContract
3733

3834
/**
@@ -181,15 +177,15 @@ object OudsCardItemDefaults {
181177
@OudsPreviewLightDark
182178
@Composable
183179
@Suppress("PreviewShouldNotBeCalledRecursively")
184-
private fun PreviewOudsStaticCardItem(@PreviewParameter(OudsCardItemPreviewParameterProvider::class) parameter: OudsCardItemPreviewParameter) {
180+
private fun PreviewOudsStaticCardItem(@PreviewParameter(OudsCardItemPreviewParameterProvider::class) parameter: OudsListItemPreviewParameter<OudsListItemLeading, OudsListItemTrailing>) {
185181
PreviewOudsStaticCardItem(theme = getPreviewTheme(), darkThemeEnabled = isSystemInDarkTheme(), parameter = parameter)
186182
}
187183

188184
@Composable
189185
internal fun PreviewOudsStaticCardItem(
190186
theme: OudsThemeContract,
191187
darkThemeEnabled: Boolean,
192-
parameter: OudsCardItemPreviewParameter
188+
parameter: OudsListItemPreviewParameter<OudsListItemLeading, OudsListItemTrailing>
193189
) = OudsPreview(theme = theme, darkThemeEnabled = darkThemeEnabled) {
194190
with(parameter) {
195191
OudsCardItem(
@@ -239,15 +235,15 @@ internal fun PreviewOudsStaticCardItemWithRoundedCorners(theme: OudsThemeContrac
239235
)
240236
@Composable
241237
@Suppress("PreviewShouldNotBeCalledRecursively")
242-
private fun PreviewOudsNavigationCardItem(@PreviewParameter(OudsCardItemPreviewParameterProvider::class) parameter: OudsCardItemPreviewParameter) {
238+
private fun PreviewOudsNavigationCardItem(@PreviewParameter(OudsCardItemPreviewParameterProvider::class) parameter: OudsListItemPreviewParameter<OudsListItemLeading, OudsListItemTrailing>) {
243239
PreviewOudsNavigationCardItem(theme = getPreviewTheme(), darkThemeEnabled = isSystemInDarkTheme(), parameter = parameter)
244240
}
245241

246242
@Composable
247243
internal fun PreviewOudsNavigationCardItem(
248244
theme: OudsThemeContract,
249245
darkThemeEnabled: Boolean,
250-
parameter: OudsCardItemPreviewParameter
246+
parameter: OudsListItemPreviewParameter<OudsListItemLeading, OudsListItemTrailing>
251247
) = OudsPreview(theme = theme, darkThemeEnabled = darkThemeEnabled) {
252248
with(parameter) {
253249
PreviewEnumEntries<OudsListItemState>(maxEnumEntriesInEachRow = 1) {
@@ -292,57 +288,14 @@ internal fun PreviewOudsNavigationCardItemWithRoundedCorners(theme: OudsThemeCon
292288
}
293289
}
294290

295-
internal data class OudsCardItemPreviewParameter(
296-
val label: String,
297-
val decoration: OudsListItemDecoration = OudsCardItemDefaults.Decoration,
298-
val indicator: OudsListItemIndicator = OudsListItemDefaults.Indicator,
299-
val contentAlignment: OudsListItemContentAlignment = OudsListItemContentAlignment.Center,
300-
val overline: String? = null,
301-
val extraLabel: String? = null,
302-
val description: String? = null,
303-
val leading: OudsListItemLeading? = null,
304-
val trailing: OudsListItemTrailing? = null,
305-
val helperText: String? = null,
306-
val enabled: Boolean = true
291+
internal class OudsCardItemPreviewParameterProvider : OudsBasicListItemPreviewParameterProvider<OudsListItemLeading, OudsListItemTrailing>(
292+
leading = listItemPreviewParameterLeading,
293+
trailing = listItemPreviewParameterTrailing,
294+
decoration = { index ->
295+
when (index) {
296+
0 -> OudsCardItemDefaults.Decoration
297+
1 -> OudsListItemDecoration.Outlined
298+
else -> OudsListItemDecoration.BackgroundOnInteraction(divider = false)
299+
}
300+
}
307301
)
308-
309-
internal class OudsCardItemPreviewParameterProvider :
310-
BasicPreviewParameterProvider<OudsCardItemPreviewParameter>(*cardItemPreviewParameterValues.toTypedArray())
311-
312-
private val cardItemPreviewParameterValues: List<OudsCardItemPreviewParameter>
313-
get() {
314-
val label = "Label"
315-
val overline = "Overline"
316-
val extraLabel = "Extra label"
317-
val description = "Description"
318-
val helperText = "Helper text"
319-
return listOf(
320-
OudsCardItemPreviewParameter(
321-
label = label,
322-
overline = overline,
323-
extraLabel = extraLabel,
324-
description = description,
325-
helperText = helperText,
326-
leading = OudsListItemLeading.Icon.Info(),
327-
trailing = OudsListItemTrailing.Icon(Icons.Outlined.FavoriteBorder, ""),
328-
),
329-
OudsCardItemPreviewParameter(
330-
label = label,
331-
decoration = OudsListItemDecoration.Outlined,
332-
indicator = OudsListItemIndicator.External,
333-
contentAlignment = OudsListItemContentAlignment.Top,
334-
leading = OudsListItemLeading.Icon(Icons.Outlined.FavoriteBorder, ""),
335-
trailing = OudsListItemTrailing.Text(label = label, extraLabel = extraLabel),
336-
),
337-
OudsCardItemPreviewParameter(
338-
label = label,
339-
decoration = OudsListItemDecoration.BackgroundOnInteraction(divider = false),
340-
indicator = OudsListItemIndicator.Previous,
341-
overline = overline,
342-
extraLabel = extraLabel,
343-
description = description,
344-
trailing = OudsListItemTrailing.Image(CheckerboardPainter, "", OudsListItemImageSize.ExtraLarge, OudsListItemImageFormat.Panoramic),
345-
leading = OudsListItemLeading.Image(CheckerboardPainter, "", OudsListItemImageSize.Medium, OudsListItemImageFormat.Square)
346-
)
347-
)
348-
}

core/src/main/java/com/orange/ouds/core/component/OudsListItem.kt

Lines changed: 73 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1108,15 +1108,15 @@ sealed interface OudsListItemTrailing : OudsListItemLeadingTrailing {
11081108
@OudsPreviewLightDark
11091109
@Composable
11101110
@Suppress("PreviewShouldNotBeCalledRecursively")
1111-
private fun PreviewOudsStaticListItem(@PreviewParameter(OudsListItemPreviewParameterProvider::class) parameter: OudsListItemPreviewParameter) {
1111+
private fun PreviewOudsStaticListItem(@PreviewParameter(OudsListItemPreviewParameterProvider::class) parameter: OudsListItemPreviewParameter<OudsListItemLeading, OudsListItemTrailing>) {
11121112
PreviewOudsStaticListItem(theme = getPreviewTheme(), darkThemeEnabled = isSystemInDarkTheme(), parameter = parameter)
11131113
}
11141114

11151115
@Composable
11161116
internal fun PreviewOudsStaticListItem(
11171117
theme: OudsThemeContract,
11181118
darkThemeEnabled: Boolean,
1119-
parameter: OudsListItemPreviewParameter
1119+
parameter: OudsListItemPreviewParameter<OudsListItemLeading, OudsListItemTrailing>
11201120
) = OudsPreview(theme = theme, darkThemeEnabled = darkThemeEnabled) {
11211121
with(parameter) {
11221122
OudsListItem(
@@ -1128,8 +1128,8 @@ internal fun PreviewOudsStaticListItem(
11281128
contentAlignment = contentAlignment,
11291129
leading = leading,
11301130
trailing = trailing,
1131-
divider = divider,
1132-
background = background,
1131+
divider = decoration.divider,
1132+
background = decoration is OudsListItemDecoration.Background || decoration is OudsListItemDecoration.BackgroundOnInteraction,
11331133
enabled = enabled
11341134
)
11351135
}
@@ -1144,15 +1144,15 @@ internal fun PreviewOudsStaticListItem(
11441144
)
11451145
@Composable
11461146
@Suppress("PreviewShouldNotBeCalledRecursively")
1147-
private fun PreviewOudsNavigationListItem(@PreviewParameter(OudsListItemPreviewParameterProvider::class) parameter: OudsListItemPreviewParameter) {
1147+
private fun PreviewOudsNavigationListItem(@PreviewParameter(OudsListItemPreviewParameterProvider::class) parameter: OudsListItemPreviewParameter<OudsListItemLeading, OudsListItemTrailing>) {
11481148
PreviewOudsNavigationListItem(theme = getPreviewTheme(), darkThemeEnabled = isSystemInDarkTheme(), parameter = parameter)
11491149
}
11501150

11511151
@Composable
11521152
internal fun PreviewOudsNavigationListItem(
11531153
theme: OudsThemeContract,
11541154
darkThemeEnabled: Boolean,
1155-
parameter: OudsListItemPreviewParameter
1155+
parameter: OudsListItemPreviewParameter<OudsListItemLeading, OudsListItemTrailing>
11561156
) = OudsPreview(theme = theme, darkThemeEnabled = darkThemeEnabled) {
11571157
with(parameter) {
11581158
PreviewEnumEntries<OudsListItemState>(maxEnumEntriesInEachRow = 1) {
@@ -1167,67 +1167,101 @@ internal fun PreviewOudsNavigationListItem(
11671167
contentAlignment = contentAlignment,
11681168
leading = leading,
11691169
trailing = trailing,
1170-
divider = divider,
1171-
background = background,
1170+
divider = decoration.divider,
1171+
background = decoration is OudsListItemDecoration.Background || decoration is OudsListItemDecoration.BackgroundOnInteraction,
11721172
enabled = enabled,
11731173
interactionSource = remember { MutableInteractionSource() }
11741174
)
11751175
}
11761176
}
11771177
}
11781178

1179-
internal data class OudsListItemPreviewParameter(
1179+
internal data class OudsListItemPreviewParameter<T : OudsListItemLeadingTrailing, S : OudsListItemLeadingTrailing>(
11801180
val label: String,
11811181
val indicator: OudsListItemIndicator = OudsListItemDefaults.Indicator,
11821182
val contentAlignment: OudsListItemContentAlignment = OudsListItemContentAlignment.Center,
11831183
val overline: String? = null,
11841184
val extraLabel: String? = null,
11851185
val description: String? = null,
1186-
val leading: OudsListItemLeading? = null,
1187-
val trailing: OudsListItemTrailing? = null,
1188-
val divider: Boolean = true,
1189-
val background: Boolean = false,
1186+
val leading: T? = null,
1187+
val trailing: S? = null,
1188+
val decoration: OudsListItemDecoration = OudsListItemDecoration.None(divider = true),
11901189
val helperText: String? = null,
11911190
val enabled: Boolean = true
11921191
)
11931192

1194-
internal class OudsListItemPreviewParameterProvider :
1195-
BasicPreviewParameterProvider<OudsListItemPreviewParameter>(*listItemPreviewParameterValues.toTypedArray())
1196-
1197-
private val listItemPreviewParameterValues: List<OudsListItemPreviewParameter>
1198-
get() {
1199-
val label = "Label"
1200-
val overline = "Overline"
1201-
val extraLabel = "Extra label"
1202-
val description = "Description"
1203-
val helperText = "Helper text"
1204-
return listOf(
1205-
OudsListItemPreviewParameter(
1193+
internal class OudsListItemPreviewParameterProvider : OudsBasicListItemPreviewParameterProvider<OudsListItemLeading, OudsListItemTrailing>(
1194+
leading = listItemPreviewParameterLeading,
1195+
trailing = listItemPreviewParameterTrailing
1196+
)
1197+
1198+
internal val listItemPreviewParameterLeading: (Int) -> OudsListItemLeading? = { index ->
1199+
when (index) {
1200+
0 -> OudsListItemLeading.Icon.Info()
1201+
1 -> OudsListItemLeading.Icon(Icons.Outlined.FavoriteBorder, "")
1202+
2 -> OudsListItemLeading.Image(CheckerboardPainter, "", OudsListItemImageSize.Medium, OudsListItemImageFormat.Square)
1203+
else -> null
1204+
}
1205+
}
1206+
1207+
internal val listItemPreviewParameterTrailing: (Int) -> OudsListItemTrailing? = { index ->
1208+
when (index) {
1209+
0 -> OudsListItemTrailing.Icon(Icons.Outlined.FavoriteBorder, "")
1210+
1 -> OudsListItemTrailing.Text(label = "Label", extraLabel = "Extra label")
1211+
2 -> OudsListItemTrailing.Image(CheckerboardPainter, "", OudsListItemImageSize.ExtraLarge, OudsListItemImageFormat.Panoramic)
1212+
else -> null
1213+
}
1214+
}
1215+
1216+
internal open class OudsBasicListItemPreviewParameterProvider<T : OudsListItemLeadingTrailing, S : OudsListItemLeadingTrailing>(
1217+
leading: (Int) -> T?,
1218+
trailing: (Int) -> S?,
1219+
decoration: (Int) -> OudsListItemDecoration = { index ->
1220+
if (index == 1) OudsListItemDecoration.Background(divider = true) else OudsListItemDecoration.None(divider = true)
1221+
}
1222+
) : BasicPreviewParameterProvider<OudsListItemPreviewParameter<T, S>>(*getListItemPreviewParameterValues(leading, trailing, decoration).toTypedArray())
1223+
1224+
private fun <T, S> getListItemPreviewParameterValues(
1225+
leading: (Int) -> T?,
1226+
trailing: (Int) -> S?,
1227+
decoration: (Int) -> OudsListItemDecoration
1228+
): List<OudsListItemPreviewParameter<T, S>> where T : OudsListItemLeadingTrailing, S : OudsListItemLeadingTrailing {
1229+
val label = "Label"
1230+
val overline = "Overline"
1231+
val extraLabel = "Extra label"
1232+
val description = "Description"
1233+
val helperText = "Helper text"
1234+
1235+
return List(3) { index ->
1236+
when (index) {
1237+
0 -> OudsListItemPreviewParameter(
12061238
label = label,
12071239
overline = overline,
12081240
extraLabel = extraLabel,
12091241
description = description,
12101242
helperText = helperText,
1211-
leading = OudsListItemLeading.Icon.Info(),
1212-
trailing = OudsListItemTrailing.Icon(Icons.Outlined.FavoriteBorder, ""),
1213-
divider = true
1214-
),
1215-
OudsListItemPreviewParameter(
1243+
leading = leading(index),
1244+
trailing = trailing(index),
1245+
decoration = decoration(index)
1246+
)
1247+
1 -> OudsListItemPreviewParameter(
12161248
label = label,
12171249
indicator = OudsListItemIndicator.External,
12181250
contentAlignment = OudsListItemContentAlignment.Top,
1219-
leading = OudsListItemLeading.Icon(Icons.Outlined.FavoriteBorder, ""),
1220-
trailing = OudsListItemTrailing.Text(label = label, extraLabel = extraLabel),
1221-
background = true
1222-
),
1223-
OudsListItemPreviewParameter(
1251+
leading = leading(index),
1252+
trailing = trailing(index),
1253+
decoration = decoration(index)
1254+
)
1255+
else -> OudsListItemPreviewParameter(
12241256
label = label,
12251257
indicator = OudsListItemIndicator.Previous,
12261258
overline = overline,
12271259
extraLabel = extraLabel,
12281260
description = description,
1229-
trailing = OudsListItemTrailing.Image(CheckerboardPainter, "", OudsListItemImageSize.ExtraLarge, OudsListItemImageFormat.Panoramic),
1230-
leading = OudsListItemLeading.Image(CheckerboardPainter, "", OudsListItemImageSize.Medium, OudsListItemImageFormat.Square)
1261+
leading = leading(index),
1262+
trailing = trailing(index),
1263+
decoration = decoration(index)
12311264
)
1232-
)
1233-
}
1265+
}
1266+
}
1267+
}

0 commit comments

Comments
 (0)