Updated on 2026-08-14
This commit is contained in:
parent
db358d8014
commit
f1eb31f5f4
8 changed files with 142 additions and 4 deletions
|
|
@ -12,10 +12,7 @@ import com.tangem.features.managetokens.component.ManageTokensComponent
|
|||
import com.tangem.features.managetokens.component.ManageTokensSource
|
||||
import com.tangem.features.markets.details.MarketsTokenDetailsComponent
|
||||
import com.tangem.features.onboarding.v2.entry.OnboardingEntryComponent
|
||||
import com.tangem.features.onramp.component.BuyCryptoComponent
|
||||
import com.tangem.features.onramp.component.OnrampComponent
|
||||
import com.tangem.features.onramp.component.SellCryptoComponent
|
||||
import com.tangem.features.onramp.component.SwapSelectTokensComponent
|
||||
import com.tangem.features.onramp.component.*
|
||||
import com.tangem.features.pushnotifications.api.navigation.PushNotificationsRouter
|
||||
import com.tangem.features.send.api.navigation.SendRouter
|
||||
import com.tangem.features.staking.api.navigation.StakingRouter
|
||||
|
|
@ -52,6 +49,7 @@ internal class ChildFactory @Inject constructor(
|
|||
private val manageTokensComponentFactory: ManageTokensComponent.Factory,
|
||||
private val marketsTokenDetailsComponentFactory: MarketsTokenDetailsComponent.Factory,
|
||||
private val onrampComponentFactory: OnrampComponent.Factory,
|
||||
private val onrampSuccessComponentFactory: OnrampSuccessComponent.Factory,
|
||||
private val buyCryptoComponentFactory: BuyCryptoComponent.Factory,
|
||||
private val sellCryptoComponentFactory: SellCryptoComponent.Factory,
|
||||
private val swapSelectTokensComponentFactory: SwapSelectTokensComponent.Factory,
|
||||
|
|
@ -203,6 +201,13 @@ internal class ChildFactory @Inject constructor(
|
|||
componentFactory = onrampComponentFactory,
|
||||
)
|
||||
}
|
||||
is AppRoute.OnrampSuccess -> {
|
||||
route.asComponentChild(
|
||||
contextProvider = contextProvider(route, contextFactory),
|
||||
params = OnrampSuccessComponent.Params(route.txId),
|
||||
componentFactory = onrampSuccessComponentFactory,
|
||||
)
|
||||
}
|
||||
is AppRoute.BuyCrypto -> {
|
||||
route.asComponentChild(
|
||||
contextProvider = contextProvider(route, contextFactory),
|
||||
|
|
|
|||
|
|
@ -299,6 +299,13 @@ sealed class AppRoute(val path: String) : Route {
|
|||
override fun getBundle(): Bundle = bundle(serializer())
|
||||
}
|
||||
|
||||
@Serializable
|
||||
data class OnrampSuccess(
|
||||
val txId: String,
|
||||
) : AppRoute(path = "/onramp/success/$txId"), RouteBundleParams {
|
||||
override fun getBundle(): Bundle = bundle(serializer())
|
||||
}
|
||||
|
||||
@Serializable
|
||||
data class BuyCrypto(
|
||||
val userWalletId: UserWalletId,
|
||||
|
|
|
|||
|
|
@ -0,0 +1,11 @@
|
|||
package com.tangem.features.onramp.component
|
||||
|
||||
import com.tangem.core.decompose.factory.ComponentFactory
|
||||
import com.tangem.core.ui.decompose.ComposableContentComponent
|
||||
|
||||
interface OnrampSuccessComponent : ComposableContentComponent {
|
||||
|
||||
data class Params(val txId: String?)
|
||||
|
||||
interface Factory : ComponentFactory<Params, OnrampSuccessComponent>
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
package com.tangem.features.onramp.success
|
||||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.collectAsState
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.ui.Modifier
|
||||
import com.tangem.core.decompose.context.AppComponentContext
|
||||
import com.tangem.core.decompose.model.getOrCreateModel
|
||||
import com.tangem.features.onramp.component.OnrampSuccessComponent
|
||||
import com.tangem.features.onramp.success.model.OnrampSuccessComponentModel
|
||||
import dagger.assisted.Assisted
|
||||
import dagger.assisted.AssistedFactory
|
||||
import dagger.assisted.AssistedInject
|
||||
|
||||
internal class DefaultOnrampSuccessComponent @AssistedInject constructor(
|
||||
@Assisted appComponentContext: AppComponentContext,
|
||||
@Assisted params: OnrampSuccessComponent.Params,
|
||||
) : OnrampSuccessComponent, AppComponentContext by appComponentContext {
|
||||
|
||||
private val model: OnrampSuccessComponentModel = getOrCreateModel(params)
|
||||
|
||||
@Composable
|
||||
override fun Content(modifier: Modifier) {
|
||||
val state by model.state.collectAsState()
|
||||
|
||||
// todo onramp [REDACTED_JIRA]
|
||||
}
|
||||
|
||||
@AssistedFactory
|
||||
interface Factory : OnrampSuccessComponent.Factory {
|
||||
override fun create(
|
||||
context: AppComponentContext,
|
||||
params: OnrampSuccessComponent.Params,
|
||||
): DefaultOnrampSuccessComponent
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
package com.tangem.features.onramp.success.di
|
||||
|
||||
import com.tangem.core.decompose.di.DecomposeComponent
|
||||
import com.tangem.core.decompose.model.Model
|
||||
import com.tangem.features.onramp.success.model.OnrampSuccessComponentModel
|
||||
import dagger.Binds
|
||||
import dagger.Module
|
||||
import dagger.hilt.InstallIn
|
||||
import dagger.multibindings.ClassKey
|
||||
import dagger.multibindings.IntoMap
|
||||
|
||||
@Module
|
||||
@InstallIn(DecomposeComponent::class)
|
||||
internal interface OnrampSuccessComponentModelModule {
|
||||
@Binds
|
||||
@IntoMap
|
||||
@ClassKey(OnrampSuccessComponentModel::class)
|
||||
fun bindOnrampSuccessComponentModel(model: OnrampSuccessComponentModel): Model
|
||||
}
|
||||
|
|
@ -0,0 +1,19 @@
|
|||
package com.tangem.features.onramp.success.di
|
||||
|
||||
import com.tangem.features.onramp.component.OnrampSuccessComponent
|
||||
import com.tangem.features.onramp.success.DefaultOnrampSuccessComponent
|
||||
import dagger.Binds
|
||||
import dagger.Module
|
||||
import dagger.hilt.InstallIn
|
||||
import dagger.hilt.components.SingletonComponent
|
||||
import javax.inject.Singleton
|
||||
|
||||
@Module
|
||||
@InstallIn(SingletonComponent::class)
|
||||
internal interface OnrampSuccessComponentModule {
|
||||
@Binds
|
||||
@Singleton
|
||||
fun bindOnrampSuccessComponentFactory(
|
||||
factory: DefaultOnrampSuccessComponent.Factory,
|
||||
): OnrampSuccessComponent.Factory
|
||||
}
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
package com.tangem.features.onramp.success.entity
|
||||
|
||||
sealed class OnrampSuccessComponentUM {
|
||||
|
||||
data object Loading : OnrampSuccessComponentUM()
|
||||
|
||||
data class Content(
|
||||
val txId: String,
|
||||
val createdAt: Long,
|
||||
val providerId: String,
|
||||
val currencyImageUrl: String,
|
||||
val fromAmount: String,
|
||||
val toAmount: String,
|
||||
val onBackClick: () -> Unit,
|
||||
) : OnrampSuccessComponentUM()
|
||||
}
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
package com.tangem.features.onramp.success.model
|
||||
|
||||
import com.tangem.core.decompose.model.Model
|
||||
import com.tangem.core.decompose.model.ParamsContainer
|
||||
import com.tangem.features.onramp.component.OnrampSuccessComponent
|
||||
import com.tangem.features.onramp.success.entity.OnrampSuccessComponentUM
|
||||
import com.tangem.utils.coroutines.CoroutineDispatcherProvider
|
||||
import kotlinx.coroutines.flow.MutableStateFlow
|
||||
import kotlinx.coroutines.flow.StateFlow
|
||||
import kotlinx.coroutines.flow.asStateFlow
|
||||
import javax.inject.Inject
|
||||
|
||||
internal class OnrampSuccessComponentModel @Inject constructor(
|
||||
override val dispatchers: CoroutineDispatcherProvider,
|
||||
paramsContainer: ParamsContainer,
|
||||
) : Model() {
|
||||
|
||||
// todo onramp remove in [REDACTED_JIRA]
|
||||
@Suppress("UnusedPrivateMember")
|
||||
private val params: OnrampSuccessComponent.Params = paramsContainer.require()
|
||||
private val _state: MutableStateFlow<OnrampSuccessComponentUM> = MutableStateFlow(
|
||||
value = OnrampSuccessComponentUM.Loading,
|
||||
)
|
||||
val state: StateFlow<OnrampSuccessComponentUM> get() = _state.asStateFlow()
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue