diff --git a/application-platform/navi-ap/src/main/kotlin/com/navi/ap/common/handler/ApiActionHandler.kt b/application-platform/navi-ap/src/main/kotlin/com/navi/ap/common/handler/ApiActionHandler.kt index c44256ba74..60f190d530 100644 --- a/application-platform/navi-ap/src/main/kotlin/com/navi/ap/common/handler/ApiActionHandler.kt +++ b/application-platform/navi-ap/src/main/kotlin/com/navi/ap/common/handler/ApiActionHandler.kt @@ -53,6 +53,7 @@ fun HandleApiAction(viewModel: ApplicationPlatformVM, activity: ApplicationPlatf val queryMap = viewModel.getQueryMap() when (action) { is FillApiAction -> { + val widgetOutputFields = viewModel.fillApiDataMap[action.fillApiLabel] var screenRequest: ScreenRequest? = null if (action.isPartialFillCall.orFalse().not()) { screenRequest = @@ -67,7 +68,7 @@ fun HandleApiAction(viewModel: ApplicationPlatformVM, activity: ApplicationPlatf ) } fillApplication( - fields = action.fields, + fields = action.fields?.plus(widgetOutputFields.orEmpty()), viewModel = viewModel, screenRequest = screenRequest, isPartialFillCall = action.isPartialFillCall.orFalse(), @@ -106,8 +107,9 @@ fun HandleApiAction(viewModel: ApplicationPlatformVM, activity: ApplicationPlatf action.isPartialFillCallExecuted.not() && action.areFieldsNotNullAndNotEmpty(viewModel.handle) ) { + val widgetOutputFields = viewModel.fillApiDataMap[action.fillApiLabel] fillApplication( - fields = action.fields, + fields = action.fields?.plus(widgetOutputFields.orEmpty()), viewModel = viewModel, screenRequest = null, isPartialFillCall = true, diff --git a/application-platform/navi-ap/src/main/kotlin/com/navi/ap/common/models/WidgetModel.kt b/application-platform/navi-ap/src/main/kotlin/com/navi/ap/common/models/WidgetModel.kt index f41fb5b3e7..758a4c7b1f 100644 --- a/application-platform/navi-ap/src/main/kotlin/com/navi/ap/common/models/WidgetModel.kt +++ b/application-platform/navi-ap/src/main/kotlin/com/navi/ap/common/models/WidgetModel.kt @@ -34,6 +34,7 @@ data class WidgetOutput( val fieldName: String? = null, val layoutId: String? = null, val keySuffix: String? = null, + val fillApiLabels: List? = null ) data class WidgetEvent(val eventName: String? = null, val stateId: String? = null) diff --git a/application-platform/navi-ap/src/main/kotlin/com/navi/ap/common/viewmodel/ApplicationPlatformVM.kt b/application-platform/navi-ap/src/main/kotlin/com/navi/ap/common/viewmodel/ApplicationPlatformVM.kt index a5ea187d29..946cc6a40c 100644 --- a/application-platform/navi-ap/src/main/kotlin/com/navi/ap/common/viewmodel/ApplicationPlatformVM.kt +++ b/application-platform/navi-ap/src/main/kotlin/com/navi/ap/common/viewmodel/ApplicationPlatformVM.kt @@ -71,6 +71,7 @@ import com.navi.common.constants.API_SUCCESS_CODE import com.navi.common.network.ApiConstants import com.navi.common.uitron.model.action.AnalyticsActionV2 import com.navi.common.uitron.model.action.AnalyticsActionV2.PredefinedEventProperty +import com.navi.common.uitron.model.action.FillApiData import com.navi.common.utils.Constants.APP_PLATFORM_APPLICATION_ID import com.navi.common.utils.Constants.APP_PLATFORM_APPLICATION_TYPE import com.navi.common.utils.Constants.LOGOUT @@ -102,6 +103,8 @@ abstract class ApplicationPlatformVM( private var queryMap: MutableMap = mutableMapOf() private var bottomSheetQueryMap: MutableMap = mutableMapOf() + val fillApiDataMap: MutableMap?> = mutableMapOf() + private val _isScreenRendered = MutableStateFlow(false) val isScreenRendered = _isScreenRendered.asStateFlow() diff --git a/application-platform/navi-ap/src/main/kotlin/com/navi/ap/screens/genericscreen/vm/ApGenericScreenVM.kt b/application-platform/navi-ap/src/main/kotlin/com/navi/ap/screens/genericscreen/vm/ApGenericScreenVM.kt index af9eeff714..7ae5a50c06 100644 --- a/application-platform/navi-ap/src/main/kotlin/com/navi/ap/screens/genericscreen/vm/ApGenericScreenVM.kt +++ b/application-platform/navi-ap/src/main/kotlin/com/navi/ap/screens/genericscreen/vm/ApGenericScreenVM.kt @@ -17,6 +17,7 @@ import com.navi.ap.common.usecase.UpdateShouldPollStrategyUseCase import com.navi.ap.common.viewmodel.ApplicationPlatformVM import com.navi.ap.domain.repository.ApplicationPlatformRepository import com.navi.ap.utils.EventUtil +import com.navi.ap.utils.buildFillParametersUsingWidgetOutput import com.navi.ap.utils.constants.SCREEN_VISIBILITY import com.navi.ap.utils.initWidgetMetaDataAndActions import com.navi.base.utils.orFalse @@ -123,6 +124,7 @@ constructor( widget?.widgetOutput?.forEach { if (it.fieldName.isNullOrEmpty()) return@forEach handle[it.fieldName] = it.layoutId + buildFillParametersUsingWidgetOutput(it, fillApiDataMap) } widget?.widgetEventListeners?.forEach { if (it.eventName.isNullOrEmpty() || it.stateId.isNullOrEmpty()) return@forEach diff --git a/application-platform/navi-ap/src/main/kotlin/com/navi/ap/utils/Utils.kt b/application-platform/navi-ap/src/main/kotlin/com/navi/ap/utils/Utils.kt index 66fbc440e1..eabb0a1ed1 100644 --- a/application-platform/navi-ap/src/main/kotlin/com/navi/ap/utils/Utils.kt +++ b/application-platform/navi-ap/src/main/kotlin/com/navi/ap/utils/Utils.kt @@ -22,6 +22,7 @@ import com.google.gson.Gson import com.jayway.jsonpath.JsonPath import com.navi.analytics.utils.NaviTrackEvent import com.navi.ap.common.models.ApScreenDefinitionStructure +import com.navi.ap.common.models.WidgetOutput import com.navi.ap.common.ui.ApplicationPlatformActivity import com.navi.ap.network.di.APNetworkModule.providesDeserializer import com.navi.ap.network.di.APNetworkModule.providesSerializer @@ -300,3 +301,15 @@ fun getEncodedString(str: String, flag: Int = Base64.DEFAULT): String? { null } } + +fun buildFillParametersUsingWidgetOutput( + widgetOutput: WidgetOutput, + fillCallMap: MutableMap?>? +) { + widgetOutput.fillApiLabels?.forEach { fillCallId -> + val fillApiDataList = fillCallMap?.getOrPut(fillCallId) { mutableListOf() } + fillApiDataList?.add( + FillApiData(name = widgetOutput.fieldName, source = SourceType.WIDGET_OUTPUT.name) + ) + } +} diff --git a/navi-common/src/main/java/com/navi/common/uitron/model/action/PartialFillCallAction.kt b/navi-common/src/main/java/com/navi/common/uitron/model/action/PartialFillCallAction.kt index 100bbbac9d..607fe47b9f 100644 --- a/navi-common/src/main/java/com/navi/common/uitron/model/action/PartialFillCallAction.kt +++ b/navi-common/src/main/java/com/navi/common/uitron/model/action/PartialFillCallAction.kt @@ -16,6 +16,7 @@ import kotlinx.parcelize.Parcelize @Parcelize data class PartialFillCallAction( + @SerializedName("fillApiLabel") val fillApiLabel: String? = null, @SerializedName("fields") val fields: List? = null, var isPartialFillCallExecuted: Boolean = false, var needMultipleExecutions: Boolean = false diff --git a/navi-common/src/main/java/com/navi/common/uitron/model/action/TriggerApiActions.kt b/navi-common/src/main/java/com/navi/common/uitron/model/action/TriggerApiActions.kt index 3dfa7eac1d..47a26016f8 100644 --- a/navi-common/src/main/java/com/navi/common/uitron/model/action/TriggerApiActions.kt +++ b/navi-common/src/main/java/com/navi/common/uitron/model/action/TriggerApiActions.kt @@ -19,6 +19,7 @@ class GetApplicationIdApiAction() : TriggerApiAction() class GetScreenDefinitionApiAction() : TriggerApiAction() open class FillApiAction( + @SerializedName("fillApiLabel") val fillApiLabel: String? = null, @SerializedName("fields") val fields: List? = null, @SerializedName("isPartialFillCall") val isPartialFillCall: Boolean? = null ) : TriggerApiAction()