From 45729ef5495a5fe74420ce4708da22f24152f336 Mon Sep 17 00:00:00 2001 From: Naman Khurmi Date: Fri, 20 Jun 2025 14:55:04 +0530 Subject: [PATCH] NTP-71293 | Naman | Fixes in section rendering (#16671) --- .../home/ui/renderer/ChunkedWidgetRenderer.kt | 21 ++++++++++++------- .../naviapp/home/viewmodel/HomeViewModel.kt | 12 +++++++++++ 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/android/app/src/main/java/com/naviapp/home/compose/home/ui/renderer/ChunkedWidgetRenderer.kt b/android/app/src/main/java/com/naviapp/home/compose/home/ui/renderer/ChunkedWidgetRenderer.kt index b0902f6791..a5362a0a63 100644 --- a/android/app/src/main/java/com/naviapp/home/compose/home/ui/renderer/ChunkedWidgetRenderer.kt +++ b/android/app/src/main/java/com/naviapp/home/compose/home/ui/renderer/ChunkedWidgetRenderer.kt @@ -10,8 +10,8 @@ package com.naviapp.home.compose.home.ui.renderer import androidx.compose.foundation.layout.Column import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.collectAsState import androidx.compose.runtime.key -import androidx.compose.runtime.mutableIntStateOf import androidx.compose.runtime.remember import androidx.compose.runtime.withFrameNanos import com.navi.common.alchemist.model.AlchemistWidgetModelDefinition @@ -41,10 +41,15 @@ fun ChunkedWidgetRenderer( ) } - val widgetsToShow = remember(elementList) { mutableIntStateOf(0) } + val stableKey = + remember(elementList) { + elementList.mapNotNull { it.widgetId }.joinToString(",").hashCode() + } + + val widgetsToShow = homeVM().widgetsToShowCount.collectAsState() Column { - elementList.take(widgetsToShow.intValue).forEach { element -> + elementList.take(widgetsToShow.value).forEach { element -> key(element.widgetId) { HomeWidgetRenderer( element = element, @@ -56,20 +61,22 @@ fun ChunkedWidgetRenderer( } } - LaunchedEffect(elementList) { - widgetsToShow.intValue = 0 + LaunchedEffect(stableKey) { + homeVM().resetWidgetsToShow() elementList.indices .chunked(chunkSize) .asFlow() .onEach { slice -> + if (slice.last() == elementList.lastIndex) { + onEvent(HpEvents.RenderedFirstTime) + } val nextCount = slice.last() + 1 - widgetsToShow.intValue = nextCount + homeVM().updateWidgetsToShow(nextCount) withFrameNanos {} if (slice.last() < elementList.lastIndex) { delay(delayBetweenWidgets) } } .collect() - onEvent(HpEvents.RenderedFirstTime) } } diff --git a/android/app/src/main/java/com/naviapp/home/viewmodel/HomeViewModel.kt b/android/app/src/main/java/com/naviapp/home/viewmodel/HomeViewModel.kt index fc42882f66..f3414027ec 100644 --- a/android/app/src/main/java/com/naviapp/home/viewmodel/HomeViewModel.kt +++ b/android/app/src/main/java/com/naviapp/home/viewmodel/HomeViewModel.kt @@ -123,6 +123,18 @@ constructor( private val _isClickEnabled: MutableStateFlow = MutableStateFlow(false) val isClickEnabled: StateFlow = _isClickEnabled + // State to track widget rendering progress + private val _widgetsToShowCount: MutableStateFlow = MutableStateFlow(0) + val widgetsToShowCount: StateFlow = _widgetsToShowCount + + fun resetWidgetsToShow() { + _widgetsToShowCount.value = 0 + } + + fun updateWidgetsToShow(count: Int) { + _widgetsToShowCount.value = count + } + fun updateClickEnabledState(isClickEnabled: Boolean) { viewModelScope.safeLaunch(Dispatchers.IO) { _isClickEnabled.value = isClickEnabled } }