Updated on 2026-08-14
This commit is contained in:
parent
b319350dd5
commit
994186039e
6 changed files with 101 additions and 18 deletions
|
|
@ -57,6 +57,7 @@ internal class CreateMobileWalletModel @Inject constructor(
|
|||
onImportClick = ::onImportClick,
|
||||
onCreateClick = ::onCreateClick,
|
||||
createButtonLoading = false,
|
||||
onTermsClick = { router.push(AppRoute.Disclaimer(isTosAccepted = true)) },
|
||||
),
|
||||
)
|
||||
|
||||
|
|
|
|||
|
|
@ -5,4 +5,5 @@ internal data class CreateMobileWalletUM(
|
|||
val onBackClick: () -> Unit,
|
||||
val onImportClick: () -> Unit,
|
||||
val onCreateClick: () -> Unit,
|
||||
val onTermsClick: () -> Unit,
|
||||
)
|
||||
|
|
@ -9,7 +9,13 @@ import androidx.compose.material3.*
|
|||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.text.LinkAnnotation
|
||||
import androidx.compose.ui.text.SpanStyle
|
||||
import androidx.compose.ui.text.TextLinkStyles
|
||||
import androidx.compose.ui.text.buildAnnotatedString
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.text.style.TextDecoration
|
||||
import androidx.compose.ui.text.withLink
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.tangem.core.ui.R
|
||||
|
|
@ -19,6 +25,8 @@ import com.tangem.core.ui.components.appbar.TangemTopAppBar
|
|||
import com.tangem.core.ui.components.appbar.models.TopAppBarButtonUM
|
||||
import com.tangem.core.ui.components.feature.FeatureBlock
|
||||
import com.tangem.core.ui.extensions.TextReference
|
||||
import com.tangem.core.ui.extensions.appendColored
|
||||
import com.tangem.core.ui.extensions.appendWithStyledPlaceholder
|
||||
import com.tangem.core.ui.extensions.stringResourceSafe
|
||||
import com.tangem.core.ui.res.TangemTheme
|
||||
import com.tangem.core.ui.res.TangemThemePreview
|
||||
|
|
@ -92,6 +100,33 @@ internal fun CreateMobileWalletContent(state: CreateMobileWalletUM, modifier: Mo
|
|||
iconRes = R.drawable.ic_tangem_card_24,
|
||||
)
|
||||
}
|
||||
val termsTemplate = stringResourceSafe(R.string.onboarding_create_wallet_term_of_conditions_text)
|
||||
val termsLinkText = stringResourceSafe(R.string.disclaimer_title)
|
||||
val termsLinkColor = TangemTheme.colors.text.accent
|
||||
Text(
|
||||
text = buildAnnotatedString {
|
||||
appendWithStyledPlaceholder(template = termsTemplate) {
|
||||
withLink(
|
||||
LinkAnnotation.Clickable(
|
||||
tag = "tos_link",
|
||||
styles = TextLinkStyles(SpanStyle(textDecoration = TextDecoration.None)),
|
||||
) { state.onTermsClick() },
|
||||
) {
|
||||
appendColored(text = termsLinkText, color = termsLinkColor)
|
||||
}
|
||||
}
|
||||
},
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
.padding(
|
||||
start = 16.dp,
|
||||
top = 16.dp,
|
||||
end = 16.dp,
|
||||
),
|
||||
style = TangemTheme.typography.caption2,
|
||||
color = TangemTheme.colors.text.tertiary,
|
||||
textAlign = TextAlign.Center,
|
||||
)
|
||||
SecondaryButton(
|
||||
modifier = Modifier
|
||||
.fillMaxWidth()
|
||||
|
|
@ -130,6 +165,7 @@ private fun PreviewCreateWalletContent() {
|
|||
createButtonLoading = false,
|
||||
onImportClick = {},
|
||||
onCreateClick = {},
|
||||
onTermsClick = {},
|
||||
),
|
||||
)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package com.tangem.features.onboarding.v2.multiwallet.impl.child.createwallet.mo
|
|||
import androidx.compose.runtime.Stable
|
||||
import com.tangem.common.CompletionResult
|
||||
import com.tangem.common.core.TangemSdkError
|
||||
import com.tangem.common.routing.AppRoute
|
||||
import com.tangem.core.analytics.api.AnalyticsEventHandler
|
||||
import com.tangem.core.analytics.models.AnalyticsParam
|
||||
import com.tangem.core.analytics.models.Basic
|
||||
|
|
@ -10,6 +11,7 @@ import com.tangem.core.analytics.models.event.OnboardingAnalyticsEvent
|
|||
import com.tangem.core.decompose.di.ModelScoped
|
||||
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.ui.extensions.resourceReference
|
||||
import com.tangem.datasource.local.appsflyer.AppsFlyerStore
|
||||
import com.tangem.domain.card.repository.CardRepository
|
||||
|
|
@ -39,6 +41,7 @@ import javax.inject.Inject
|
|||
@ModelScoped
|
||||
internal class MultiWalletCreateWalletModel @Inject constructor(
|
||||
paramsContainer: ParamsContainer,
|
||||
private val router: Router,
|
||||
override val dispatchers: CoroutineDispatcherProvider,
|
||||
private val tangemSdkManager: TangemSdkManager,
|
||||
private val sendFeedbackEmailUseCase: SendFeedbackEmailUseCase,
|
||||
|
|
@ -77,6 +80,7 @@ internal class MultiWalletCreateWalletModel @Inject constructor(
|
|||
onDone.emit(Step.SeedPhrase)
|
||||
}
|
||||
},
|
||||
onTermsOfUseClick = { router.push(AppRoute.Disclaimer(isTosAccepted = true)) },
|
||||
dialog = null,
|
||||
),
|
||||
)
|
||||
|
|
|
|||
|
|
@ -8,13 +8,22 @@ import androidx.compose.runtime.Composable
|
|||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.platform.testTag
|
||||
import androidx.compose.ui.text.LinkAnnotation
|
||||
import androidx.compose.ui.text.SpanStyle
|
||||
import androidx.compose.ui.text.TextLinkStyles
|
||||
import androidx.compose.ui.text.buildAnnotatedString
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.text.style.TextDecoration
|
||||
import androidx.compose.ui.text.withLink
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.dp
|
||||
import com.tangem.core.ui.R as CoreUiR
|
||||
import com.tangem.core.ui.components.BasicDialog
|
||||
import com.tangem.core.ui.components.DialogButtonUM
|
||||
import com.tangem.core.ui.components.PrimaryButtonIconEnd
|
||||
import com.tangem.core.ui.components.SecondaryButton
|
||||
import com.tangem.core.ui.extensions.appendColored
|
||||
import com.tangem.core.ui.extensions.appendWithStyledPlaceholder
|
||||
import com.tangem.core.ui.extensions.resolveReference
|
||||
import com.tangem.core.ui.extensions.stringReference
|
||||
import com.tangem.core.ui.extensions.stringResourceSafe
|
||||
|
|
@ -24,24 +33,10 @@ import com.tangem.core.ui.test.StoriesScreenTestTags
|
|||
import com.tangem.features.onboarding.v2.impl.R
|
||||
import com.tangem.features.onboarding.v2.multiwallet.impl.child.createwallet.ui.state.MultiWalletCreateWalletUM
|
||||
|
||||
@Suppress("LongMethod")
|
||||
@Composable
|
||||
internal fun MultiWalletCreateWallet(state: MultiWalletCreateWalletUM, modifier: Modifier = Modifier) {
|
||||
if (state.dialog != null) {
|
||||
BasicDialog(
|
||||
title = state.dialog.title.resolveReference(),
|
||||
message = state.dialog.message.resolveReference(),
|
||||
confirmButton = DialogButtonUM(
|
||||
title = state.dialog.confirmButtonText.resolveReference(),
|
||||
onClick = state.dialog.onConfirmClick,
|
||||
),
|
||||
dismissButton = DialogButtonUM(
|
||||
title = state.dialog.dismissButtonText.resolveReference(),
|
||||
isWarning = state.dialog.dismissWarningColor,
|
||||
onClick = state.dialog.onDismissButtonClick,
|
||||
),
|
||||
onDismissDialog = state.dialog.onDismiss,
|
||||
)
|
||||
}
|
||||
MultiWalletCreateWalletDialog(state)
|
||||
|
||||
Column(
|
||||
modifier = modifier
|
||||
|
|
@ -78,9 +73,33 @@ internal fun MultiWalletCreateWallet(state: MultiWalletCreateWalletUM, modifier:
|
|||
)
|
||||
}
|
||||
|
||||
val termsTemplate = stringResourceSafe(CoreUiR.string.onboarding_create_wallet_term_of_conditions_text)
|
||||
val termsLinkText = stringResourceSafe(CoreUiR.string.disclaimer_title)
|
||||
val termsLinkColor = TangemTheme.colors.text.accent
|
||||
Text(
|
||||
text = buildAnnotatedString {
|
||||
appendWithStyledPlaceholder(template = termsTemplate) {
|
||||
withLink(
|
||||
LinkAnnotation.Clickable(
|
||||
tag = "tos_link",
|
||||
styles = TextLinkStyles(SpanStyle(textDecoration = TextDecoration.None)),
|
||||
) { state.onTermsOfUseClick() },
|
||||
) {
|
||||
appendColored(text = termsLinkText, color = termsLinkColor)
|
||||
}
|
||||
}
|
||||
},
|
||||
modifier = Modifier
|
||||
.padding(start = 16.dp, end = 16.dp, bottom = 16.dp)
|
||||
.fillMaxWidth(),
|
||||
style = TangemTheme.typography.caption2,
|
||||
color = TangemTheme.colors.text.tertiary,
|
||||
textAlign = TextAlign.Center,
|
||||
)
|
||||
|
||||
PrimaryButtonIconEnd(
|
||||
modifier = Modifier
|
||||
.padding(start = 16.dp, end = 16.dp, bottom = 12.dp)
|
||||
.padding(start = 16.dp, end = 16.dp, bottom = 8.dp)
|
||||
.fillMaxWidth(),
|
||||
iconResId = R.drawable.ic_tangem_24,
|
||||
text = stringResourceSafe(R.string.onboarding_create_wallet_button_create_wallet),
|
||||
|
|
@ -90,7 +109,7 @@ internal fun MultiWalletCreateWallet(state: MultiWalletCreateWalletUM, modifier:
|
|||
if (state.showOtherOptionsButton) {
|
||||
SecondaryButton(
|
||||
modifier = Modifier
|
||||
.padding(start = 16.dp, end = 16.dp, bottom = 16.dp)
|
||||
.padding(start = 16.dp, end = 16.dp, bottom = 8.dp)
|
||||
.fillMaxWidth(),
|
||||
text = stringResourceSafe(R.string.onboarding_create_wallet_options_button_options),
|
||||
onClick = state.onOtherOptionsClick,
|
||||
|
|
@ -99,6 +118,26 @@ internal fun MultiWalletCreateWallet(state: MultiWalletCreateWalletUM, modifier:
|
|||
}
|
||||
}
|
||||
|
||||
@Composable
|
||||
private fun MultiWalletCreateWalletDialog(state: MultiWalletCreateWalletUM) {
|
||||
if (state.dialog != null) {
|
||||
BasicDialog(
|
||||
title = state.dialog.title.resolveReference(),
|
||||
message = state.dialog.message.resolveReference(),
|
||||
confirmButton = DialogButtonUM(
|
||||
title = state.dialog.confirmButtonText.resolveReference(),
|
||||
onClick = state.dialog.onConfirmClick,
|
||||
),
|
||||
dismissButton = DialogButtonUM(
|
||||
title = state.dialog.dismissButtonText.resolveReference(),
|
||||
isWarning = state.dialog.dismissWarningColor,
|
||||
onClick = state.dialog.onDismissButtonClick,
|
||||
),
|
||||
onDismissDialog = state.dialog.onDismiss,
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@Preview(showBackground = true)
|
||||
@Composable
|
||||
private fun Preview() {
|
||||
|
|
@ -110,6 +149,7 @@ private fun Preview() {
|
|||
onCreateWalletClick = {},
|
||||
showOtherOptionsButton = true,
|
||||
onOtherOptionsClick = {},
|
||||
onTermsOfUseClick = {},
|
||||
dialog = null,
|
||||
),
|
||||
)
|
||||
|
|
|
|||
|
|
@ -9,5 +9,6 @@ internal data class MultiWalletCreateWalletUM(
|
|||
val showOtherOptionsButton: Boolean,
|
||||
val onCreateWalletClick: () -> Unit,
|
||||
val onOtherOptionsClick: () -> Unit,
|
||||
val onTermsOfUseClick: () -> Unit,
|
||||
val dialog: OnboardingDialogUM?,
|
||||
)
|
||||
Loading…
Add table
Add a link
Reference in a new issue