TP-58679 | Sohan Reddy | Custom renderer Implementation (#410)

Co-authored-by: Kishan Kumar <kishan.kumar@navi.com>
This commit is contained in:
Sohan Reddy Atukula
2024-04-23 15:29:42 +05:30
committed by GitHub
parent 1a6db5060a
commit 9bffb2f738
23 changed files with 150 additions and 26 deletions

View File

@@ -15,6 +15,7 @@ import androidx.compose.ui.text.font.FontWeight
import com.navi.alfred.AlfredManager
import com.navi.uitron.IUiTronDependencyProvider
import com.navi.uitron.model.UiTronConfig
import com.navi.uitron.model.ui.OutlinedTextFieldValueTransformation
import com.navi.uitron.utils.EMPTY
import com.navi.uitron.utils.SPACE
@@ -64,6 +65,13 @@ class UiTronDependencyProvider : IUiTronDependencyProvider {
}
}
override fun getTransformedText(
value: String?,
data: OutlinedTextFieldValueTransformation?
): String {
return value.orEmpty()
}
override fun numberToWords(amount: String): String {
try {
val number = amount.toDouble().toInt().toString()

View File

@@ -12,6 +12,7 @@ import android.view.View
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.font.FontWeight
import com.navi.uitron.model.UiTronConfig
import com.navi.uitron.model.ui.OutlinedTextFieldValueTransformation
interface IUiTronDependencyProvider {
@@ -19,6 +20,11 @@ interface IUiTronDependencyProvider {
fun getFontWeight(fontWeight: String?): FontWeight
fun getTransformedText(
value: String? = null,
data: OutlinedTextFieldValueTransformation? = null,
): String
enum class FontWeightEnum {
TT_MEDIUM,
TT_BOLD,

View File

@@ -16,7 +16,7 @@ import java.lang.reflect.Type
/**
* Copyright © 2022 by Navi Technologies Private Limited All rights reserved. Strictly confidential
*/
class ComposePropertyDeserializer : JsonDeserializer<BaseProperty> {
open class ComposePropertyDeserializer : JsonDeserializer<BaseProperty> {
override fun deserialize(
json: JsonElement?,
typeOfT: Type?,

View File

@@ -81,7 +81,10 @@ data class OutlinedTextFieldValueTransformation(
val currentDateFormat: String? = null,
val targetDateFormat: String? = null,
val prefixText: String? = null,
val suffixText: String? = null
val suffixText: String? = null,
val maxDisplayLength: Int? = null,
val decimalPlaces: Int? = null,
val useVerboseFormat: Boolean? = null
)
data class TextFieldIconData(val leadingIcon: UiTronView, val trailingIcon: UiTronView)

View File

@@ -12,7 +12,7 @@ package com.navi.uitron.model.ui
* precision
* @param letterSpacing in sp
*/
data class TextProperty(
open class TextProperty(
var fontFamily: String? = null,
var fontWeight: String? = null,
var fontSize: Int? = null,
@@ -47,6 +47,7 @@ data class TextProperty(
textProperty?.maxLines?.let { maxLines = it }
textProperty?.textBrushData?.let { textBrushData = it }
textProperty?.valueTransformation?.let { valueTransformation = it }
textProperty?.textShadow?.let { textShadow = it }
textProperty?.includeFontPadding?.let { includeFontPadding = it }
}

View File

@@ -131,7 +131,11 @@ class AnimatedVisibilityRenderer(
if (childrenView.data.isNullOrEmpty()) {
uiTronRenderer.Render(composeViews = listOf(childrenView))
} else {
UiTronRenderer(childrenView.data, uiTronViewModel)
UiTronRenderer(
childrenView.data,
uiTronViewModel,
uiTronRenderer.customUiTronRenderer
)
.Render(composeViews = listOf(childrenView))
}
}

View File

@@ -177,7 +177,11 @@ class BoxRenderer(
)
)
} else {
UiTronRenderer(childrenView.data, uiTronViewModel)
UiTronRenderer(
childrenView.data,
uiTronViewModel,
uiTronRenderer.customUiTronRenderer
)
.Render(
composeViews = listOf(childrenView),
boxConstraintsToModifier(

View File

@@ -167,7 +167,13 @@ class CardRenderer(
) {
childrenComposeViews.forEach {
if (it.data.isNullOrEmpty()) uiTronRenderer.Render(composeViews = listOf(it))
else UiTronRenderer(it.data, uiTronViewModel).Render(composeViews = listOf(it))
else
UiTronRenderer(
it.data,
uiTronViewModel,
uiTronRenderer.customUiTronRenderer
)
.Render(composeViews = listOf(it))
}
}
}

View File

@@ -178,7 +178,11 @@ class ColumnRenderer(
)
)
} else {
UiTronRenderer(childrenView.data, uiTronViewModel)
UiTronRenderer(
childrenView.data,
uiTronViewModel,
uiTronRenderer.customUiTronRenderer
)
.Render(
composeViews = listOf(childrenView),
constraintsToModifier(
@@ -206,7 +210,11 @@ class ColumnRenderer(
)
)
} else {
UiTronRenderer(childComposeView.data, uiTronViewModel)
UiTronRenderer(
childComposeView.data,
uiTronViewModel,
uiTronRenderer.customUiTronRenderer
)
.Render(
composeViews = listOf(childComposeView),
constraintsToModifier(

View File

@@ -396,7 +396,11 @@ class CustomTextFieldRenderer(private val uiTronRenderer: UiTronRenderer) :
) {
borderColor = property.colors?.errorBorderColor
property.errorView?.let {
UiTronRenderer(it.data, uiTronViewModel)
UiTronRenderer(
it.data,
uiTronViewModel,
uiTronRenderer.customUiTronRenderer
)
.Render(composeViews = it.parentComposeView.orEmpty())
}
uiTronViewModel.handle[property.errorMessageLayoutId.getDataId()] =
@@ -411,7 +415,11 @@ class CustomTextFieldRenderer(private val uiTronRenderer: UiTronRenderer) :
getTransformedText(property.successTextTransformation, inputValue)
if (successText.isNotNullAndNotEmpty()) {
property.successView?.let {
UiTronRenderer(it.data, uiTronViewModel)
UiTronRenderer(
it.data,
uiTronViewModel,
uiTronRenderer.customUiTronRenderer
)
.Render(composeViews = it.parentComposeView.orEmpty())
}
uiTronViewModel.handle[property.successMessageLayoutId.getDataId()] =

View File

@@ -66,7 +66,12 @@ class DialogRenderer(
if (it.data.isNullOrEmpty()) {
uiTronRenderer.Render(composeViews = listOf(it))
} else {
UiTronRenderer(it.data, uiTronViewModel).Render(composeViews = listOf(it))
UiTronRenderer(
it.data,
uiTronViewModel,
uiTronRenderer.customUiTronRenderer
)
.Render(composeViews = listOf(it))
}
}
}

View File

@@ -127,7 +127,11 @@ class DropdownRenderer(
if (it.data.isNullOrEmpty()) {
uiTronRenderer.Render(composeViews = listOf(it))
} else {
UiTronRenderer(it.data, uiTronViewModel)
UiTronRenderer(
it.data,
uiTronViewModel,
uiTronRenderer.customUiTronRenderer
)
.Render(composeViews = listOf(it))
}
}

View File

@@ -144,7 +144,11 @@ class GridRenderer(
if (childrenView.data.isNullOrEmpty()) {
uiTronRenderer.Render(listOf(childrenView))
} else {
UiTronRenderer(childrenView.data, uiTronViewModel)
UiTronRenderer(
childrenView.data,
uiTronViewModel,
uiTronRenderer.customUiTronRenderer
)
.Render(listOf(childrenView))
}
}

View File

@@ -143,7 +143,11 @@ class LazyColumnRenderer(
if (childrenView.data.isNullOrEmpty()) {
uiTronRenderer.Render(listOf(childrenView))
} else {
UiTronRenderer(childrenView.data, uiTronViewModel)
UiTronRenderer(
childrenView.data,
uiTronViewModel,
uiTronRenderer.customUiTronRenderer
)
.Render(listOf(childrenView))
}
}

View File

@@ -199,7 +199,12 @@ class LazyGridRenderer(
if (childrenView.data.isNullOrEmpty()) {
uiTronRenderer.Render(listOf(childrenView))
} else {
UiTronRenderer(childrenView.data, uiTronViewModel).Render(listOf(childrenView))
UiTronRenderer(
childrenView.data,
uiTronViewModel,
uiTronRenderer.customUiTronRenderer
)
.Render(listOf(childrenView))
}
}
}

View File

@@ -147,7 +147,11 @@ class LazyRowRenderer(
if (childrenView.data.isNullOrEmpty()) {
uiTronRenderer.Render(listOf(childrenView))
} else {
UiTronRenderer(childrenView.data, uiTronViewModel)
UiTronRenderer(
childrenView.data,
uiTronViewModel,
uiTronRenderer.customUiTronRenderer
)
.Render(listOf(childrenView))
}
}

View File

@@ -275,7 +275,11 @@ class OutlinedTextFieldRenderer(
outlinedTextFieldData.errorMessage.isNullOrBlank().not()
) {
property.errorView?.let {
UiTronRenderer(it.data, uiTronViewModel)
UiTronRenderer(
it.data,
uiTronViewModel,
uiTronRenderer.customUiTronRenderer
)
.Render(composeViews = it.parentComposeView.orEmpty())
}
uiTronViewModel.handle[property.errorMessageLayoutId.getDataId()] =
@@ -285,7 +289,11 @@ class OutlinedTextFieldRenderer(
getTransformedText(property.successTextTransformation, inputValue)
if (successText.isNotNullAndNotEmpty()) {
property.successView?.let {
UiTronRenderer(it.data, uiTronViewModel)
UiTronRenderer(
it.data,
uiTronViewModel,
uiTronRenderer.customUiTronRenderer
)
.Render(composeViews = it.parentComposeView.orEmpty())
}
uiTronViewModel.handle[property.successMessageLayoutId.getDataId()] =

View File

@@ -169,7 +169,11 @@ class PagerRenderer(
if (childrenView.data.isNullOrEmpty()) {
uiTronRenderer.Render(listOf(childrenView))
} else {
UiTronRenderer(childrenView.data, uiTronViewModel)
UiTronRenderer(
childrenView.data,
uiTronViewModel,
uiTronRenderer.customUiTronRenderer
)
.Render(listOf(childrenView))
}
}
@@ -242,7 +246,11 @@ class PagerRenderer(
if (childrenView.data.isNullOrEmpty()) {
uiTronRenderer.Render(listOf(childrenView))
} else {
UiTronRenderer(childrenView.data, uiTronViewModel)
UiTronRenderer(
childrenView.data,
uiTronViewModel,
uiTronRenderer.customUiTronRenderer
)
.Render(listOf(childrenView))
}
}

View File

@@ -178,7 +178,11 @@ class RowRenderer(
)
)
} else {
UiTronRenderer(childrenView.data, uiTronViewModel)
UiTronRenderer(
childrenView.data,
uiTronViewModel,
uiTronRenderer.customUiTronRenderer
)
.Render(
listOf(childrenView),
constraintsToModifier(
@@ -205,7 +209,11 @@ class RowRenderer(
)
)
} else {
UiTronRenderer(childrenView.data, uiTronViewModel)
UiTronRenderer(
childrenView.data,
uiTronViewModel,
uiTronRenderer.customUiTronRenderer
)
.Render(
listOf(childrenView),
constraintsToModifier(

View File

@@ -177,7 +177,11 @@ class ScratchCardRenderer(
if (it.data.isNullOrEmpty()) {
uiTronRenderer.Render(composeViews = listOf(it))
} else {
UiTronRenderer(it.data, uiTronViewModel)
UiTronRenderer(
it.data,
uiTronViewModel,
uiTronRenderer.customUiTronRenderer
)
.Render(composeViews = listOf(it))
}
}

View File

@@ -19,7 +19,8 @@ import com.navi.uitron.viewmodel.UiTronViewModel
class UiTronRenderer(
private val dataMap: MutableMap<String, UiTronData?>?,
private val uiTronViewModel: UiTronViewModel
private val uiTronViewModel: UiTronViewModel,
val customUiTronRenderer: CustomUiTronRenderer? = null
) {
private val uiTronRenderingFactory by lazy {
@@ -44,6 +45,24 @@ class UiTronRenderer(
uiTronRenderer = this
)
)
?: run {
customUiTronRenderer?.Render(
composeView = composeView,
modifier = modifier ?: Modifier,
dataMap = dataMap,
uiTronViewModel = uiTronViewModel
)
}
}
}
}
interface CustomUiTronRenderer {
@Composable
fun Render(
composeView: UiTronView,
modifier: Modifier,
dataMap: Map<String, UiTronData?>?,
uiTronViewModel: UiTronViewModel
)
}

View File

@@ -13,7 +13,7 @@ import com.google.gson.JsonSerializer
import com.navi.uitron.model.ui.*
import java.lang.reflect.Type
class ComposePropertySerializer : JsonSerializer<BaseProperty> {
open class ComposePropertySerializer : JsonSerializer<BaseProperty> {
override fun serialize(
src: BaseProperty?,
typeOfSrc: Type?,

View File

@@ -419,7 +419,10 @@ fun getTransformedText(
}
.toString()
}
else -> null
else -> {
UiTronSdkManager.getDependencyProvider()
.getTransformedText(value = inputText, data = valueTransformation)
}
}
} ?: return null
}