From 0c1e75dd0500078bd1836ce2df2ea8b41816d947 Mon Sep 17 00:00:00 2001 From: Anupam Kumar Date: Thu, 2 May 2024 19:39:43 +0530 Subject: [PATCH] TP-58762 | tracker widget list rendering changes (#10273) Co-authored-by: Sanjay P --- .../customwidget/StepTrackerWidgetData.kt | 7 +-- .../common/viewmodel/StepTrackerWidgetVM.kt | 46 ++++++++++++++++--- .../navi/ap/utils/constants/ApConstants.kt | 2 + 3 files changed, 45 insertions(+), 10 deletions(-) diff --git a/android/application-platform/navi-ap/src/main/kotlin/com/navi/ap/common/models/customwidget/StepTrackerWidgetData.kt b/android/application-platform/navi-ap/src/main/kotlin/com/navi/ap/common/models/customwidget/StepTrackerWidgetData.kt index 682eedac52..4d1af8bc19 100644 --- a/android/application-platform/navi-ap/src/main/kotlin/com/navi/ap/common/models/customwidget/StepTrackerWidgetData.kt +++ b/android/application-platform/navi-ap/src/main/kotlin/com/navi/ap/common/models/customwidget/StepTrackerWidgetData.kt @@ -9,6 +9,7 @@ package com.navi.ap.common.models.customwidget import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.navi.ap.common.models.lambdamodels.response.KYCItemData import com.navi.uitron.model.data.UiTronData import com.navi.uitron.model.ui.CardProperty import com.navi.uitron.model.ui.ColumnProperty @@ -16,16 +17,16 @@ import com.navi.uitron.model.ui.DividerProperty import com.navi.uitron.model.ui.UiTronView data class StepTrackerWidgetData( - val trackerData: Map>? = null, + val trackerData: Map>>? = null, val dividerProperty: DividerProperty? = null, val cardProperty: CardProperty? = null, val columnProperty: ColumnProperty? = null, val shimmerView: List? = null, val lambdaResponse: Any? = null ) : UiTronData() { - private var _trackerList: List? = null + private var _trackerList: List? = null - val trackerList: List? + val trackerList: List? get() { if (_trackerList == null) { _trackerList = this.getWidgetDataList(lambdaResponse) diff --git a/android/application-platform/navi-ap/src/main/kotlin/com/navi/ap/common/viewmodel/StepTrackerWidgetVM.kt b/android/application-platform/navi-ap/src/main/kotlin/com/navi/ap/common/viewmodel/StepTrackerWidgetVM.kt index c5632375dd..0720405a36 100644 --- a/android/application-platform/navi-ap/src/main/kotlin/com/navi/ap/common/viewmodel/StepTrackerWidgetVM.kt +++ b/android/application-platform/navi-ap/src/main/kotlin/com/navi/ap/common/viewmodel/StepTrackerWidgetVM.kt @@ -10,13 +10,19 @@ package com.navi.ap.common.viewmodel import androidx.lifecycle.viewModelScope import com.google.gson.reflect.TypeToken import com.navi.ap.common.models.WidgetModelDefinition +import com.navi.ap.common.models.customwidget.StepTrackerData import com.navi.ap.common.models.customwidget.StepTrackerWidgetData +import com.navi.ap.common.models.lambdamodels.response.KYCItemData import com.navi.ap.utils.appendIndexToDataKeys import com.navi.ap.utils.appendIndexToWidget +import com.navi.ap.utils.constants.TWO import com.navi.ap.utils.constants.WIDGET_DATA +import com.navi.ap.utils.constants.ZERO import com.navi.ap.utils.getGsonBuilders import com.navi.ap.utils.injector.PathInjector import com.navi.ap.utils.toJson +import com.navi.base.utils.EMPTY +import com.navi.base.utils.orZero import com.navi.common.viewmodel.BaseVM import com.navi.uitron.model.UiTronResponse import dagger.hilt.android.lifecycle.HiltViewModel @@ -72,13 +78,7 @@ class StepTrackerWidgetVM @Inject constructor() : BaseVM() { widgetType ) val updatedResponse = - stepTrackerWidgetData.trackerData - ?.get(listItem.type) - ?.get(listItem.status) - ?.let { - PathInjector, Any?>() - .injectData(modifiedWidget, it) - } ?: modifiedWidget + getUpdatedResponse(listItem, stepTrackerWidgetData, modifiedWidget) updatedResponse.widgetStates?.forEach { if (it.stateId.isNullOrEmpty()) return@forEach handle[it.stateId] = it.actionData @@ -91,4 +91,36 @@ class StepTrackerWidgetVM @Inject constructor() : BaseVM() { widgetListState.clear() widgetListState += updatedWidgetList ?: emptyList() } + + private suspend fun getUpdatedResponse( + listItem: KYCItemData, + stepTrackerWidgetData: StepTrackerWidgetData? = null, + modifiedWidget: WidgetModelDefinition + ): WidgetModelDefinition { + return stepTrackerWidgetData + ?.trackerData + ?.get(listItem.type) + ?.let { getSourceItem(listItem, it) } + ?.let { + PathInjector, Any?>() + .injectData(modifiedWidget, it) + } ?: modifiedWidget + } + + private fun getSourceItem( + listItem: KYCItemData, + it: Map> + ): StepTrackerData? { + val sdkItem = + if (listItem.sourceList?.size.orZero() < TWO) { + it.getOrElse( + listItem.sourceList?.getOrNull(ZERO)?.sdkInOrder?.getOrNull(ZERO).orEmpty() + ) { + it.values.first() + } + } else { + it[EMPTY] + } + return sdkItem?.get(listItem.status.orEmpty()) + } } diff --git a/android/application-platform/navi-ap/src/main/kotlin/com/navi/ap/utils/constants/ApConstants.kt b/android/application-platform/navi-ap/src/main/kotlin/com/navi/ap/utils/constants/ApConstants.kt index 6691ae8bb0..8d1caabfa3 100644 --- a/android/application-platform/navi-ap/src/main/kotlin/com/navi/ap/utils/constants/ApConstants.kt +++ b/android/application-platform/navi-ap/src/main/kotlin/com/navi/ap/utils/constants/ApConstants.kt @@ -86,8 +86,10 @@ const val SELECTED_DATE_WITH_SUFFIX = "selectedDateWithSuffix" const val SELECTED_FORMATTED_DATE = "selectedFormattedDate" const val SHOW = "show" const val INVALID_PIN_CODE = "INVALID_PIN_CODE" +const val ZERO = 0 const val KEY_PAYMENT_SDK_VERSION = "KEY_PAYMENT_SDK_VERSION" const val KEY_PAYMENT_GATEWAY_EVENT_NAME = "paymentGatewayEventName" const val PAYMENT_DOT_GATEWAY_DOT = "payments.gateway." const val DOT_SDK_DOT = ".sdk." const val RUPEE_SYMBOL = "₹" +const val TWO = 2