TP-20119 add uitron bottomsheet using compose (#5572)

This commit is contained in:
Hitesh Kumar
2023-03-06 19:06:52 +05:30
committed by GitHub Enterprise
parent 653f436314
commit 8dacfe7c49
6 changed files with 120 additions and 5 deletions

View File

@@ -0,0 +1,79 @@
/*
*
* * Copyright © 2023 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
package com.navi.common.customview
import android.view.ViewStub
import androidx.compose.ui.platform.ComposeView
import androidx.databinding.DataBindingUtil
import androidx.lifecycle.lifecycleScope
import com.navi.common.R
import com.navi.common.databinding.BottomSheetUitronBinding
import com.navi.common.ui.fragment.BaseBottomSheet
import com.navi.uitron.model.UiTronResponse
import com.navi.uitron.render.UiTronRenderer
import com.navi.uitron.viewmodel.UiTronViewModel
import kotlinx.coroutines.launch
class UiTronBottomSheet : BaseBottomSheet() {
private lateinit var binding: BottomSheetUitronBinding
private lateinit var bottomSheetId: String
private lateinit var uiTronViewModel: UiTronViewModel
private var uiTronResponse: UiTronResponse? = null
override fun setContainerView(viewStub: ViewStub) {
viewStub.layoutResource = R.layout.bottom_sheet_uitron
binding = DataBindingUtil.getBinding(viewStub.inflate())!!
initUI()
}
private fun initUI() {
(binding.root as? ComposeView)?.let {
it.setContent {
UiTronRenderer(
uiTronResponse?.data,
uiTronViewModel
).Render(composeViews = uiTronResponse?.parentComposeView.orEmpty())
}
}
lifecycleScope.launch {
uiTronViewModel.handle.getStateFlow<String?>(bottomSheetId, null).collect {
handleBottomSheetActions(it)
}
}
}
private fun handleBottomSheetActions(action: String?) {
when (action) {
DISMISS_ACTION -> {
uiTronViewModel.handle[bottomSheetId] = null
safelyDismissDialog()
}
}
}
override val screenName: String
get() = TAG
companion object {
const val TAG = "UITRON_BOTTOM_SHEET"
const val DISMISS_ACTION = "dismiss"
fun getInstance(
bottomSheetId: String,
uiTronResponse: UiTronResponse?,
uiTronViewModel: UiTronViewModel
) =
UiTronBottomSheet().apply {
this.bottomSheetId = bottomSheetId
this.uiTronResponse = uiTronResponse
this.uiTronViewModel = uiTronViewModel
}
}
}

View File

@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<androidx.compose.ui.platform.ComposeView
android:layout_width="match_parent"
android:layout_height="wrap_content" />
</layout>

View File

@@ -1,14 +1,16 @@
/*
*
* * Copyright © 2023 by Navi Technologies Private Limited
* * Copyright © 2023 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
package com.navi.uitron.deserializer
import com.google.gson.JsonDeserializationContext
import com.google.gson.JsonDeserializer
import com.google.gson.JsonElement
import com.navi.uitron.model.action.BottomSheetAction
import com.navi.uitron.model.action.CtaAction
import com.navi.uitron.model.action.MakeApiAction
import com.navi.uitron.model.action.UpdateViewStateAction
@@ -32,10 +34,13 @@ class UiTronActionDeserializer : JsonDeserializer<UiTronAction> {
UiTronActionType.CtaAction.name -> {
context?.deserialize(jsonObject, CtaAction::class.java)
}
UiTronActionType.BottomSheetAction.name -> {
context?.deserialize(jsonObject, BottomSheetAction::class.java)
}
else -> null
}
}
return null
}
}
}

View File

@@ -0,0 +1,15 @@
/*
*
* * Copyright © 2023 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
package com.navi.uitron.model.action
import com.navi.uitron.model.data.UiTronAction
data class BottomSheetAction(
val bottomSheetId: String? = null,
val action: String? = null
) : UiTronAction()

View File

@@ -38,7 +38,7 @@ data class UiTronFocusData(
)
enum class UiTronActionType {
UpdateViewState, ApiCall, CtaAction
UpdateViewState, ApiCall, CtaAction, BottomSheetAction
}
enum class ApiTagType {

View File

@@ -1,13 +1,15 @@
/*
*
* * Copyright © 2023 by Navi Technologies Private Limited
* * Copyright © 2023 by Navi Technologies Limited
* * All rights reserved. Strictly confidential
*
*/
package com.navi.uitron.utils
import androidx.lifecycle.SavedStateHandle
import com.navi.base.model.CtaData
import com.navi.uitron.model.action.BottomSheetAction
import com.navi.uitron.model.action.CtaAction
import com.navi.uitron.model.action.UpdateViewStateAction
import com.navi.uitron.model.data.ExecutionType
@@ -48,7 +50,12 @@ constructor(
is CtaAction -> {
ctaCallbackFlow.emit(uiTronAction.ctaData)
}
is BottomSheetAction -> {
uiTronAction.bottomSheetId?.let {
handle[it] = uiTronAction.action
}
}
}
}
}
}