TP-58762 | tracker widget list rendering changes (#10273)

Co-authored-by: Sanjay P <sanjay.p@navi.com>
This commit is contained in:
Anupam Kumar
2024-05-02 19:39:43 +05:30
committed by GitHub
parent 19b11e87a6
commit 0c1e75dd05
3 changed files with 45 additions and 10 deletions

View File

@@ -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<String, Map<String, StepTrackerData>>? = null,
val trackerData: Map<String, Map<String, Map<String, StepTrackerData>>>? = null,
val dividerProperty: DividerProperty? = null,
val cardProperty: CardProperty? = null,
val columnProperty: ColumnProperty? = null,
val shimmerView: List<UiTronView>? = null,
val lambdaResponse: Any? = null
) : UiTronData() {
private var _trackerList: List<StepTrackerInfo>? = null
private var _trackerList: List<KYCItemData>? = null
val trackerList: List<StepTrackerInfo>?
val trackerList: List<KYCItemData>?
get() {
if (_trackerList == null) {
_trackerList = this.getWidgetDataList(lambdaResponse)

View File

@@ -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<WidgetModelDefinition<UiTronResponse>, 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<UiTronResponse>
): WidgetModelDefinition<UiTronResponse> {
return stepTrackerWidgetData
?.trackerData
?.get(listItem.type)
?.let { getSourceItem(listItem, it) }
?.let {
PathInjector<WidgetModelDefinition<UiTronResponse>, Any?>()
.injectData(modifiedWidget, it)
} ?: modifiedWidget
}
private fun getSourceItem(
listItem: KYCItemData,
it: Map<String, Map<String, StepTrackerData>>
): 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())
}
}

View File

@@ -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