Updated on 2026-08-14
This commit is contained in:
parent
f18338ff44
commit
9f08cdbd07
4 changed files with 42 additions and 32 deletions
|
|
@ -2,7 +2,6 @@ package com.tangem.features.details.component.preview
|
|||
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import com.tangem.core.analytics.DummyAppInstanceIdProvider
|
||||
import com.tangem.core.decompose.navigation.DummyRouter
|
||||
import com.tangem.core.navigation.url.DummyUrlOpener
|
||||
import com.tangem.features.details.component.DetailsComponent
|
||||
|
|
@ -18,9 +17,7 @@ internal class PreviewDetailsComponent : DetailsComponent {
|
|||
private val previewBlocks = runBlocking {
|
||||
ItemsBuilder(
|
||||
router = DummyRouter(),
|
||||
urlOpener = DummyUrlOpener(),
|
||||
appInstanceIdProvider = DummyAppInstanceIdProvider(),
|
||||
).buildAll(isWalletConnectAvailable = true, onSupportClick = {})
|
||||
).buildAll(isWalletConnectAvailable = true, onSupportClick = {}, onBuyClick = {})
|
||||
}
|
||||
|
||||
private val previewFooter = DetailsFooterUM(
|
||||
|
|
|
|||
|
|
@ -1,10 +1,12 @@
|
|||
package com.tangem.features.details.model
|
||||
|
||||
import arrow.core.getOrElse
|
||||
import com.tangem.core.analytics.AppInstanceIdProvider
|
||||
import com.tangem.core.decompose.di.ComponentScoped
|
||||
import com.tangem.core.decompose.model.Model
|
||||
import com.tangem.core.decompose.model.ParamsContainer
|
||||
import com.tangem.core.decompose.navigation.Router
|
||||
import com.tangem.core.navigation.url.UrlOpener
|
||||
import com.tangem.domain.redux.LegacyAction
|
||||
import com.tangem.domain.redux.ReduxStateHolder
|
||||
import com.tangem.domain.walletconnect.CheckIsWalletConnectAvailableUseCase
|
||||
|
|
@ -35,6 +37,8 @@ internal class DetailsModel @Inject constructor(
|
|||
private val appVersionProvider: AppVersionProvider,
|
||||
private val checkIsWalletConnectAvailableUseCase: CheckIsWalletConnectAvailableUseCase,
|
||||
private val router: Router,
|
||||
private val urlOpener: UrlOpener,
|
||||
private val appInstanceIdProvider: AppInstanceIdProvider,
|
||||
paramsContainer: ParamsContainer,
|
||||
private val getSelectedWalletSyncUseCase: GetSelectedWalletSyncUseCase,
|
||||
private val appStateHolder: ReduxStateHolder,
|
||||
|
|
@ -74,6 +78,7 @@ internal class DetailsModel @Inject constructor(
|
|||
items.value = itemsBuilder.buildAll(
|
||||
isWalletConnectAvailable = isWalletConnectAvailable,
|
||||
onSupportClick = ::sendFeedback,
|
||||
onBuyClick = ::onBuyClick,
|
||||
)
|
||||
}
|
||||
|
||||
|
|
@ -86,6 +91,12 @@ internal class DetailsModel @Inject constructor(
|
|||
}
|
||||
}
|
||||
|
||||
private fun onBuyClick() {
|
||||
modelScope.launch {
|
||||
urlOpener.openUrl(buildBuyLink())
|
||||
}
|
||||
}
|
||||
|
||||
private fun updateState(items: ImmutableList<DetailsItemUM>) {
|
||||
state.update { prevState ->
|
||||
prevState.copy(items = items)
|
||||
|
|
@ -93,4 +104,14 @@ internal class DetailsModel @Inject constructor(
|
|||
}
|
||||
|
||||
private fun getAppVersion(): String = "${appVersionProvider.versionName} (${appVersionProvider.versionCode})"
|
||||
|
||||
private suspend fun buildBuyLink(): String {
|
||||
return appInstanceIdProvider.getAppInstanceId()?.let {
|
||||
"$BUY_TANGEM_URL&app_instance_id=$it"
|
||||
} ?: BUY_TANGEM_URL
|
||||
}
|
||||
|
||||
private companion object {
|
||||
const val BUY_TANGEM_URL = "https://buy.tangem.com/?utm_source=tangem&utm_medium=app"
|
||||
}
|
||||
}
|
||||
|
|
@ -1,10 +1,8 @@
|
|||
package com.tangem.features.details.utils
|
||||
|
||||
import com.tangem.common.routing.AppRoute
|
||||
import com.tangem.core.analytics.AppInstanceIdProvider
|
||||
import com.tangem.core.decompose.di.ComponentScoped
|
||||
import com.tangem.core.decompose.navigation.Router
|
||||
import com.tangem.core.navigation.url.UrlOpener
|
||||
import com.tangem.core.ui.components.block.model.BlockUM
|
||||
import com.tangem.core.ui.extensions.resourceReference
|
||||
import com.tangem.core.ui.extensions.stringReference
|
||||
|
|
@ -17,20 +15,19 @@ import kotlinx.collections.immutable.toImmutableList
|
|||
import javax.inject.Inject
|
||||
|
||||
@ComponentScoped
|
||||
internal class ItemsBuilder @Inject constructor(
|
||||
private val router: Router,
|
||||
private val urlOpener: UrlOpener,
|
||||
private val appInstanceIdProvider: AppInstanceIdProvider,
|
||||
) {
|
||||
internal class ItemsBuilder @Inject constructor(private val router: Router) {
|
||||
|
||||
fun buildAll(isWalletConnectAvailable: Boolean, onSupportClick: () -> Unit): ImmutableList<DetailsItemUM> =
|
||||
buildList {
|
||||
buildWalletConnectBlock(isWalletConnectAvailable)?.let(::add)
|
||||
buildUserWalletListBlock().let(::add)
|
||||
buildShopBlock().let(::add)
|
||||
buildSettingsBlock().let(::add)
|
||||
buildSupportBlock(onSupportClick).let(::add)
|
||||
}.toImmutableList()
|
||||
fun buildAll(
|
||||
isWalletConnectAvailable: Boolean,
|
||||
onSupportClick: () -> Unit,
|
||||
onBuyClick: () -> Unit,
|
||||
): ImmutableList<DetailsItemUM> = buildList {
|
||||
buildWalletConnectBlock(isWalletConnectAvailable)?.let(::add)
|
||||
buildUserWalletListBlock().let(::add)
|
||||
buildShopBlock(onBuyClick).let(::add)
|
||||
buildSettingsBlock().let(::add)
|
||||
buildSupportBlock(onSupportClick).let(::add)
|
||||
}.toImmutableList()
|
||||
|
||||
private fun buildWalletConnectBlock(isWalletConnectAvailable: Boolean): DetailsItemUM? {
|
||||
return if (isWalletConnectAvailable) {
|
||||
|
|
@ -44,7 +41,7 @@ internal class ItemsBuilder @Inject constructor(
|
|||
|
||||
private fun buildUserWalletListBlock(): DetailsItemUM = DetailsItemUM.UserWalletList
|
||||
|
||||
private fun buildShopBlock(): DetailsItemUM = DetailsItemUM.Basic(
|
||||
private fun buildShopBlock(onBuyClick: () -> Unit): DetailsItemUM = DetailsItemUM.Basic(
|
||||
id = "shop",
|
||||
items = persistentListOf(
|
||||
DetailsItemUM.Basic.Item(
|
||||
|
|
@ -52,7 +49,7 @@ internal class ItemsBuilder @Inject constructor(
|
|||
block = BlockUM(
|
||||
text = resourceReference(R.string.details_buy_wallet),
|
||||
iconRes = R.drawable.ic_tangem_24,
|
||||
onClick = { urlOpener.openUrl(buildBuyLink()) },
|
||||
onClick = onBuyClick,
|
||||
),
|
||||
),
|
||||
),
|
||||
|
|
@ -104,14 +101,4 @@ internal class ItemsBuilder @Inject constructor(
|
|||
),
|
||||
),
|
||||
)
|
||||
|
||||
private fun buildBuyLink(): String {
|
||||
return appInstanceIdProvider.getAppInstanceIdSync()?.let {
|
||||
"$BUY_TANGEM_URL&app_instance_id=$it"
|
||||
} ?: BUY_TANGEM_URL
|
||||
}
|
||||
|
||||
private companion object {
|
||||
const val BUY_TANGEM_URL = "https://buy.tangem.com/?utm_source=tangem&utm_medium=app"
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue