@@ -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
11161116internal 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
11521152internal 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