From 82375d11f4a9a5b0cd7d29952b24b66fc8a05873 Mon Sep 17 00:00:00 2001 From: Venkat Praneeth Reddy Date: Mon, 16 Dec 2024 14:00:54 +0530 Subject: [PATCH] NTP-13754 | Venkat Praneeth Reddy | Lazy row match parent functionality (#646) --- .../navi/uitron/model/ui/LazyRowProperty.kt | 5 ++++ .../com/navi/uitron/model/ui/UiTronView.kt | 3 ++- .../com/navi/uitron/render/LazyRowRenderer.kt | 25 +++++++++++++------ .../main/java/com/navi/uitron/utils/Ext.kt | 11 ++++++++ 4 files changed, 35 insertions(+), 9 deletions(-) diff --git a/navi-uitron/src/main/java/com/navi/uitron/model/ui/LazyRowProperty.kt b/navi-uitron/src/main/java/com/navi/uitron/model/ui/LazyRowProperty.kt index 8388e4f..f407d76 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/model/ui/LazyRowProperty.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/model/ui/LazyRowProperty.kt @@ -7,6 +7,9 @@ package com.navi.uitron.model.ui +import android.os.Parcelable +import kotlinx.parcelize.Parcelize + class LazyRowProperty( var arrangementData: ArrangementData? = null, var verticalAlignment: String? = null, @@ -21,3 +24,5 @@ class LazyRowProperty( rowProperty?.repeat?.let { repeat = it } } } + +@Parcelize data class LazyRowConstraints(val fillWidth: Boolean? = null) : Parcelable diff --git a/navi-uitron/src/main/java/com/navi/uitron/model/ui/UiTronView.kt b/navi-uitron/src/main/java/com/navi/uitron/model/ui/UiTronView.kt index 819bbfb..6a1b1d7 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/model/ui/UiTronView.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/model/ui/UiTronView.kt @@ -126,7 +126,8 @@ class UiTronShapeData : UiTronShape() data class ParentConstraints( var rowConstraints: RowConstraints? = null, var columnConstraints: ColumnConstraints? = null, - var boxConstraints: BoxConstraints? = null + var boxConstraints: BoxConstraints? = null, + var lazyRowConstraints: LazyRowConstraints? = null ) : Parcelable @Parcelize diff --git a/navi-uitron/src/main/java/com/navi/uitron/render/LazyRowRenderer.kt b/navi-uitron/src/main/java/com/navi/uitron/render/LazyRowRenderer.kt index 3800ab1..a1c667e 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/render/LazyRowRenderer.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/render/LazyRowRenderer.kt @@ -8,6 +8,7 @@ package com.navi.uitron.render import androidx.compose.foundation.layout.Arrangement +import androidx.compose.foundation.layout.Box import androidx.compose.foundation.lazy.LazyRow import androidx.compose.foundation.lazy.items import androidx.compose.foundation.lazy.rememberLazyListState @@ -29,6 +30,7 @@ import com.navi.uitron.modifer.ModifierBuilder import com.navi.uitron.utils.alfredMaskSensitiveComposable import com.navi.uitron.utils.applyImpressionTracking import com.navi.uitron.utils.clip +import com.navi.uitron.utils.constraintsToModifier import com.navi.uitron.utils.customClickable import com.navi.uitron.utils.customCombinedClick import com.navi.uitron.utils.customOffset @@ -150,15 +152,22 @@ class LazyRowRenderer( } ) { items(childrenComposeViews) { childrenView -> - if (childrenView.data.isNullOrEmpty()) { - uiTronRenderer.Render(listOf(childrenView)) - } else { - UiTronRenderer( - childrenView.data, - uiTronViewModel, - uiTronRenderer.customUiTronRenderer + Box( + modifier = + constraintsToModifier( + childrenView.property?.parentConstraints?.lazyRowConstraints ) - .Render(listOf(childrenView)) + ) { + if (childrenView.data.isNullOrEmpty()) { + uiTronRenderer.Render(listOf(childrenView)) + } else { + UiTronRenderer( + childrenView.data, + uiTronViewModel, + uiTronRenderer.customUiTronRenderer + ) + .Render(listOf(childrenView)) + } } } } diff --git a/navi-uitron/src/main/java/com/navi/uitron/utils/Ext.kt b/navi-uitron/src/main/java/com/navi/uitron/utils/Ext.kt index 6678fe7..840b6b7 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/utils/Ext.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/utils/Ext.kt @@ -37,6 +37,7 @@ import androidx.compose.foundation.layout.width import androidx.compose.foundation.layout.widthIn import androidx.compose.foundation.layout.wrapContentHeight import androidx.compose.foundation.layout.wrapContentWidth +import androidx.compose.foundation.lazy.LazyItemScope import androidx.compose.foundation.lazy.LazyListState import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.text.KeyboardOptions @@ -117,6 +118,7 @@ import com.navi.uitron.model.ui.HorizontalAlignmentType import com.navi.uitron.model.ui.HorizontalArrangementType import com.navi.uitron.model.ui.InputTransformationType import com.navi.uitron.model.ui.InteractionType +import com.navi.uitron.model.ui.LazyRowConstraints import com.navi.uitron.model.ui.Offset as UiTronOffset import com.navi.uitron.model.ui.OutlinedTextFieldKeyBoardOptions import com.navi.uitron.model.ui.OutlinedTextFieldTextStyle @@ -797,6 +799,15 @@ fun BoxScope.boxConstraintsToModifier(boxConstraints: BoxConstraints?): Modifier } } +@SuppressLint("ModifierFactoryExtensionFunction") +fun LazyItemScope.constraintsToModifier(lazyRowConstraints: LazyRowConstraints?): Modifier { + return Modifier.conditional( + lazyRowConstraints?.fillWidth != null && lazyRowConstraints.fillWidth == true + ) { + fillParentMaxWidth() + } +} + @Composable fun getBorderStrokeBrushData( borderStrokeData: BorderStrokeData?,