From 3c8fc105bddd1d4fbddfe692e0af58e588f9bfd0 Mon Sep 17 00:00:00 2001 From: Kishan Kumar Date: Mon, 4 Sep 2023 20:08:43 +0530 Subject: [PATCH] Bugfix/slider null issue (#166) * TP-00000 | UiTron version bump(1.0.18) * TP-00000 | Added fix for slider update * TP-00000 | version bump * TP-00000 | Support added for MVEL expression having sameId * TP-0000 | version bump(1.0.20) * TP-0000 | version bump(1.0.21) * TP-39924 | tooltip positioning fix * TP-39924 | uitron version bump(1.0.22) * null check applied * TP-00000 | Slider recomposition issue fixed --------- Co-authored-by: Aparna Vadlamani Co-authored-by: Rajinikanth --- .../navi/uitron/render/SliderRendererV2.kt | 43 +++++++++++-------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/navi-uitron/src/main/java/com/navi/uitron/render/SliderRendererV2.kt b/navi-uitron/src/main/java/com/navi/uitron/render/SliderRendererV2.kt index 826ffd9..706ab9f 100644 --- a/navi-uitron/src/main/java/com/navi/uitron/render/SliderRendererV2.kt +++ b/navi-uitron/src/main/java/com/navi/uitron/render/SliderRendererV2.kt @@ -59,16 +59,13 @@ class SliderRendererV2( private val uiTronRenderer: UiTronRenderer, ) : Renderer { - private val LEFT_PADDING = 16.dp - private val DEFAULT_PADDING = 2.dp private val DEFAULT_TOOLTIP_VERTICAL_OFFSET = 6.dp + private val TOOLTIP_ZINDEX = 1f + private val PREV_VALUE = "prev_value" + private val EXTRA_DATA = "extra_data" private val defaultHorizontalPadding by lazy { dpToPx(10) } - private val TOOLTIP_ZINDEX = 1f - private val DEFAULT_THUMB_WIDTH = 20.dp - private val PREV_VALUE = "prev_value" - @Composable override fun Render( @@ -79,11 +76,11 @@ class SliderRendererV2( ) { if (!property.visible.orTrue()) return super.Render(property, uiTronData, uiTronViewModel, modifier) - var sliderUiTronData = uiTronData as? SliderDataV2 ?: return - val steps = sliderUiTronData.stepValue?.size.orVal(1) - 1 + var sliderUiTronData = uiTronData as? SliderDataV2 ?: return + val steps = remember { mutableIntStateOf(sliderUiTronData.stepValue?.size.orVal(1) - 1) } val stepToValue = remember { mutableStateOf(mapOf()) } - val mvelUuid = remember { mutableStateOf(0) } + val mvelUuid = remember { mutableStateOf(null) } var sliderStart by remember { mutableFloatStateOf(0f) } var sliderEnd by remember { mutableFloatStateOf(0f) } @@ -93,7 +90,14 @@ class SliderRendererV2( if (position == null || position < 0) return uiTronViewModel.handle["${property.layoutId.getInputId()}_${PREV_VALUE}"] = uiTronViewModel.handle.get(property.layoutId.getInputId()) + + uiTronViewModel.handle["${property.layoutId}_${PREV_VALUE}_${EXTRA_DATA}"] = + uiTronViewModel.handle.get("${property.layoutId}_${EXTRA_DATA}") + uiTronViewModel.handle[property.layoutId.getInputId()] = stepToValue.value[position.toString()] + + uiTronViewModel.handle["${property.layoutId}_${EXTRA_DATA}"] = + sliderUiTronData.stepValue?.getOrNull(position)?.data.toString() } LaunchedEffect(property.isStateFul) { @@ -118,7 +122,7 @@ class SliderRendererV2( val sliderPosition = remember { mutableStateOf(0f) } - LaunchedEffect(sliderUiTronData.stepValues) { + LaunchedEffect(mvelUuid.value) { val stepMap = mutableMapOf() sliderUiTronData._stepValue = null sliderUiTronData.stepValue?.forEachIndexed { index, stepValue -> @@ -128,10 +132,11 @@ class SliderRendererV2( sliderUiTronData, sliderUiTronData.sliderValue.orEmpty() )?.toFloat() ?: 0f + val totalStep = sliderUiTronData.stepValue?.size.orVal(1) - 1 stepToValue.value = stepMap sliderPosition.value = positionIndex - - thumbX = sliderStart + (positionIndex / steps) * (sliderEnd - sliderStart) + steps.value = totalStep + thumbX = sliderStart + (positionIndex / totalStep) * (sliderEnd - sliderStart) saveSelectionToHandle(positionIndex.toNearestInt()) } @@ -168,8 +173,7 @@ class SliderRendererV2( value = sliderPosition.value, onValueChange = { sliderPosition.value = it - thumbX = - sliderStart + (it / steps) * (sliderEnd - sliderStart) + thumbX = sliderStart + (it / steps.value) * (sliderEnd - sliderStart) updateValuesInMvelActionOnSliderChange( uiTronViewModel, sliderUiTronData, @@ -187,15 +191,16 @@ class SliderRendererV2( stepToValue.value ) }, - valueRange = 0f..(steps.toFloat()), - steps = steps, + valueRange = 0f..(steps.value.toFloat()), + steps = steps.value, modifier = (modifier ?: Modifier) .rotate(property.rotation ?: 0f) .alpha(property.alpha ?: 1.0f) .onGloballyPositioned { coordinates -> val posInRoot = coordinates.positionInParent() sliderStart = posInRoot.x + defaultHorizontalPadding - sliderEnd = posInRoot.x + coordinates.size.width.toFloat() - defaultHorizontalPadding + sliderEnd = + posInRoot.x + coordinates.size.width.toFloat() - defaultHorizontalPadding }, colors = SliderDefaults.colors( thumbColor = property.sliderColors.thumbColor?.hexToComposeColor @@ -335,7 +340,7 @@ class SliderRendererV2( ) { val sliderValue: String? = stepToValue[sliderPosition.toString()] sliderData.slideData?.onSlide?.let { uiTronClickData -> - val dataMap = sliderData.stepValue?.get(sliderPosition)?.data + val dataMap = sliderData.stepValue?.getOrNull(sliderPosition)?.data ?.toMutableMap() ?: mutableMapOf() dataMap[VALUE] = sliderValue dataMap.toMap().let { @@ -355,7 +360,7 @@ class SliderRendererV2( ) { val sliderValue: String? = stepToValue[sliderPosition.toString()] sliderData.slideData?.onSlideFinish?.let { uiTronClickData -> - val dataMap = sliderData.stepValue?.get(sliderPosition)?.data + val dataMap = sliderData.stepValue?.getOrNull(sliderPosition)?.data ?.toMutableMap() ?: mutableMapOf() dataMap[VALUE] = sliderValue dataMap.toMap().let {