Updated on 2026-08-14

This commit is contained in:
Tangem 2026-07-17 12:49:55 +04:00
parent 7f4454c8d2
commit 98d0d9c75e
39 changed files with 266 additions and 3536 deletions

View file

@ -26,7 +26,6 @@ import androidx.compose.ui.tooling.preview.datasource.CollectionPreviewParameter
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import com.tangem.common.ui.account.AccountIcon
import com.tangem.core.res.getStringSafe
import com.tangem.core.ui.components.PrimaryButtonIconStart
import com.tangem.core.ui.components.SpacerH12
import com.tangem.core.ui.components.SpacerW12
@ -38,7 +37,6 @@ import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.extensions.stringReference
import com.tangem.core.ui.extensions.stringResourceSafe
import com.tangem.core.ui.message.SnackbarMessage
import com.tangem.core.ui.res.LocalRedesignEnabled
import com.tangem.core.ui.res.LocalTopSnackbarHostState
import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.res.TangemThemePreview
@ -56,7 +54,6 @@ internal fun ParticipateBottomBlock(
code: String,
shareLink: String,
expectedAwards: ExpectedAwards?,
snackbarHostState: SnackbarHostState,
onAgreementClick: () -> Unit,
onCopyClick: () -> Unit,
onShareClick: (String) -> Unit,
@ -75,7 +72,6 @@ internal fun ParticipateBottomBlock(
AdditionalButtons(
code = code,
shareLink = shareLink,
snackbarHostState = snackbarHostState,
onCopyClick = onCopyClick,
onShareClick = onShareClick,
)
@ -350,7 +346,6 @@ private fun AwardAccount(accountAward: ReferralStateHolder.AccountAward) {
private fun AdditionalButtons(
code: String,
shareLink: String,
snackbarHostState: SnackbarHostState,
onCopyClick: () -> Unit,
onShareClick: (String) -> Unit,
) {
@ -358,8 +353,6 @@ private fun AdditionalButtons(
val hapticFeedback = LocalHapticFeedback.current
val coroutineScope = rememberCoroutineScope()
val resources = LocalContext.current.resources
val isRedesignEnabled = LocalRedesignEnabled.current
val tangemTopSnackbarHostState = LocalTopSnackbarHostState.current
Row(
@ -375,19 +368,12 @@ private fun AdditionalButtons(
clipboardManager.setText(AnnotatedString(code))
coroutineScope.launch {
if (isRedesignEnabled) {
tangemTopSnackbarHostState.showSnackbar(
SnackbarMessage(
startIconId = R.drawable.ic_check_24,
message = resourceReference(R.string.referral_promo_code_copied),
),
)
} else {
snackbarHostState.showSnackbar(
message = resources.getStringSafe(R.string.referral_promo_code_copied),
duration = SnackbarDuration.Short,
)
}
tangemTopSnackbarHostState.showSnackbar(
SnackbarMessage(
startIconId = R.drawable.ic_check_24,
message = resourceReference(R.string.referral_promo_code_copied),
),
)
}
},
modifier = Modifier.weight(1f),
@ -435,7 +421,6 @@ private fun ParticipateBottomBlockPreview(
code = data.code,
shareLink = data.shareLink,
expectedAwards = data.expectedAwards,
snackbarHostState = SnackbarHostState(),
onAgreementClick = data.onAgreementClick,
onCopyClick = data.onCopyClick,
onShareClick = data.onShareClick,

View file

@ -11,7 +11,6 @@ import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material3.*
import androidx.compose.runtime.Composable
import androidx.compose.runtime.SideEffect
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
@ -38,15 +37,12 @@ import com.tangem.core.ui.components.SpacerH24
import com.tangem.core.ui.components.SpacerH32
import com.tangem.core.ui.components.appbar.AppBarWithBackButton
import com.tangem.core.ui.components.currency.icon.CurrencyIconState
import com.tangem.core.ui.components.snackbar.CopiedTextSnackbar
import com.tangem.core.ui.components.snackbar.TangemSnackbar
import com.tangem.core.ui.components.token.TokenItem
import com.tangem.core.ui.components.token.state.TokenItemState
import com.tangem.core.ui.components.token.state.TokenItemState.FiatAmountState
import com.tangem.core.ui.extensions.stringReference
import com.tangem.core.ui.extensions.stringResourceSafe
import com.tangem.core.ui.message.SnackbarMessage
import com.tangem.core.ui.res.LocalRedesignEnabled
import com.tangem.core.ui.res.LocalTopSnackbarHostState
import com.tangem.core.ui.res.TangemColorPalette
import com.tangem.core.ui.res.TangemTheme
@ -69,8 +65,6 @@ import java.util.UUID
*/
@Composable
internal fun ReferralScreen(stateHolder: ReferralStateHolder) {
val snackbarHostState = remember(::SnackbarHostState)
Scaffold(
topBar = {
AppBarWithBackButton(
@ -79,61 +73,30 @@ internal fun ReferralScreen(stateHolder: ReferralStateHolder) {
onBackClick = stateHolder.headerState.onBackClicked,
)
},
snackbarHost = {
SnackbarHost(
hostState = snackbarHostState,
modifier = Modifier
.padding(horizontal = TangemTheme.dimens.spacing16)
.padding(bottom = TangemTheme.dimens.spacing108),
) {
// TODO: use StateEvent
if (stateHolder.errorSnackbar != null) {
TangemSnackbar(data = it, actionOnNewLine = true)
} else {
CopiedTextSnackbar(it)
}
}
},
containerColor = TangemTheme.colors.background.secondary,
) {
) { paddingValues ->
ReferralContent(
stateHolder = stateHolder,
snackbarHostState = snackbarHostState,
onAgreementClick = stateHolder.analytics.onAgreementClicked,
modifier = Modifier.padding(it),
modifier = Modifier.padding(paddingValues),
)
}
val errorSnackbar = stateHolder.errorSnackbar
val coroutineScope = rememberCoroutineScope()
val resources = LocalContext.current.resources
val isRedesignEnabled = LocalRedesignEnabled.current
val topSnackbarHostState = LocalTopSnackbarHostState.current
SideEffect {
if (errorSnackbar != null) {
coroutineScope.launch {
if (isRedesignEnabled) {
topSnackbarHostState.showSnackbar(
message = resources.getMessageForErrorSnackbar(errorSnackbar.throwable),
actionLabel = resources.getStringSafe(R.string.warning_button_ok),
duration = SnackbarMessage.Duration.Indefinite,
)
errorSnackbar.onOkClicked()
return@launch
}
val result = snackbarHostState.showSnackbar(
topSnackbarHostState.showSnackbar(
message = resources.getMessageForErrorSnackbar(errorSnackbar.throwable),
actionLabel = resources.getStringSafe(R.string.warning_button_ok),
duration = SnackbarDuration.Indefinite,
duration = SnackbarMessage.Duration.Indefinite,
)
if (result == SnackbarResult.ActionPerformed) {
errorSnackbar.onOkClicked()
}
errorSnackbar.onOkClicked()
}
}
}
@ -142,7 +105,6 @@ internal fun ReferralScreen(stateHolder: ReferralStateHolder) {
@Composable
private fun ReferralContent(
stateHolder: ReferralStateHolder,
snackbarHostState: SnackbarHostState,
onAgreementClick: () -> Unit,
modifier: Modifier = Modifier,
) {
@ -155,7 +117,6 @@ private fun ReferralContent(
item {
ReferralInfo(
stateHolder = stateHolder,
snackbarHostState = snackbarHostState,
onAgreementClick = onAgreementClick,
)
}
@ -189,11 +150,7 @@ private fun Header() {
}
@Composable
private fun ReferralInfo(
stateHolder: ReferralStateHolder,
snackbarHostState: SnackbarHostState,
onAgreementClick: () -> Unit,
) {
private fun ReferralInfo(stateHolder: ReferralStateHolder, onAgreementClick: () -> Unit) {
when (val state = stateHolder.referralInfoState) {
is ReferralInfoState.ParticipantContent -> {
Conditions(state = state)
@ -203,7 +160,6 @@ private fun ReferralInfo(
shareLink = state.shareLink,
expectedAwards = state.expectedAwards,
accountAward = state.accountAward,
snackbarHostState = snackbarHostState,
onAgreementClick = onAgreementClick,
onCopyClick = stateHolder.analytics.onCopyClicked,
onShareClick = stateHolder.analytics.onShareClicked,