diff --git a/core/res/src/main/res/values-de/strings.xml b/core/res/src/main/res/values-de/strings.xml index c45019e608..e81c23629f 100644 --- a/core/res/src/main/res/values-de/strings.xml +++ b/core/res/src/main/res/values-de/strings.xml @@ -207,6 +207,8 @@ Choose token Your tokens Other tokens + Waiting + Transaction in progress… Failed to load the information about the referral program. Please try again later. Failed to load the information about the referral program. Reason: %s. Please try again later. Your participation request could not be processed. Reason: %s. Please try again later. If the problem persists — feel free to contact our support. diff --git a/core/res/src/main/res/values-fr/strings.xml b/core/res/src/main/res/values-fr/strings.xml index 141884f103..7fa8a61c7d 100644 --- a/core/res/src/main/res/values-fr/strings.xml +++ b/core/res/src/main/res/values-fr/strings.xml @@ -207,6 +207,8 @@ Choose token Your tokens Other tokens + Waiting + Transaction in progress… Failed to load the information about the referral program. Please try again later. Failed to load the information about the referral program. Reason: %s. Please try again later. Your participation request could not be processed. Reason: %s. Please try again later. If the problem persists — feel free to contact our support. diff --git a/core/res/src/main/res/values-it/strings.xml b/core/res/src/main/res/values-it/strings.xml index 191394da45..d183fa7130 100644 --- a/core/res/src/main/res/values-it/strings.xml +++ b/core/res/src/main/res/values-it/strings.xml @@ -207,6 +207,8 @@ Choose token Your tokens Other tokens + Waiting + Transaction in progress… Failed to load the information about the referral program. Please try again later. Failed to load the information about the referral program. Reason: %s. Please try again later. Your participation request could not be processed. Reason: %s. Please try again later. If the problem persists — feel free to contact our support. diff --git a/core/res/src/main/res/values-ru/strings.xml b/core/res/src/main/res/values-ru/strings.xml index ab80bdbeee..1301436efc 100644 --- a/core/res/src/main/res/values-ru/strings.xml +++ b/core/res/src/main/res/values-ru/strings.xml @@ -207,6 +207,8 @@ Выберите токен Ваши токены Другие токены + Подождите + Транзакция в процессе… Не удалось загрузить информацию по реферальной программе. Пожалуйста, попробуйте позже. Не удалось загрузить информацию по реферальной программе. Код ошибки: %s. Пожалуйста, попробуйте позже. Не удалось обработать вашу заявку на участие. Код ошибки: %s. Пожалуйста, попробуйте позже. Если проблема сохранится, вы можете обратиться в техподдержку. diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml index db71c3e8d1..0824f29b0f 100644 --- a/core/res/src/main/res/values/strings.xml +++ b/core/res/src/main/res/values/strings.xml @@ -207,6 +207,8 @@ Choose token Your tokens Other tokens + Waiting + Transaction in progress… Failed to load the information about the referral program. Please try again later. Failed to load the information about the referral program. Error code: %s. Please try again later. Your participation request could not be processed. Error code: %s. Please try again later. If the problem persists — feel free to contact our support. diff --git a/core/ui/src/main/java/com/tangem/core/ui/res/TangemDimens.kt b/core/ui/src/main/java/com/tangem/core/ui/res/TangemDimens.kt index 3fdc09bdb6..c97f04e9f0 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/res/TangemDimens.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/res/TangemDimens.kt @@ -31,6 +31,7 @@ data class TangemDimens internal constructor( // region Size val size0: Dp = 0.dp, val size0_5: Dp = 0.5.dp, + val size2: Dp = 2.dp, val size4: Dp = 4.dp, val size8: Dp = 8.dp, val size11: Dp = 11.dp, diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/models/SwapPermissionStateHolder.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/models/SwapPermissionStateHolder.kt index 76d4ee8587..0fd2f4fef7 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/models/SwapPermissionStateHolder.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/models/SwapPermissionStateHolder.kt @@ -1,14 +1,21 @@ package com.tangem.feature.swap.models -data class SwapPermissionStateHolder( - val currency: String, - val amount: String, - val walletAddress: String, - val spenderAddress: String, - val fee: String, - val approveButton: ApprovePermissionButton, - val cancelButton: CancelPermissionButton, -) +sealed class SwapPermissionState { + + object InProgress : SwapPermissionState() + + object Empty : SwapPermissionState() + + data class ReadyForRequest( + val currency: String, + val amount: String, + val walletAddress: String, + val spenderAddress: String, + val fee: String, + val approveButton: ApprovePermissionButton, + val cancelButton: CancelPermissionButton, + ) : SwapPermissionState() +} data class ApprovePermissionButton( val enabled: Boolean, diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/models/SwapStateHolder.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/models/SwapStateHolder.kt index f8e9dada94..3f78f0a311 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/models/SwapStateHolder.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/models/SwapStateHolder.kt @@ -9,7 +9,7 @@ data class SwapStateHolder( val fee: FeeState = FeeState.Loaded(), val warnings: List = emptyList(), - val permissionState: SwapPermissionStateHolder? = null, + val permissionState: SwapPermissionState = SwapPermissionState.Empty, val successState: SwapSuccessStateHolder? = null, val selectTokenState: SwapSelectTokenStateHolder? = null, diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapPermissionBottomSheetContent.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapPermissionBottomSheetContent.kt index 0d8f96198f..e81b1da59c 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapPermissionBottomSheetContent.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapPermissionBottomSheetContent.kt @@ -26,12 +26,12 @@ import com.tangem.core.ui.components.atoms.Hand import com.tangem.core.ui.res.TangemTheme import com.tangem.feature.swap.models.ApprovePermissionButton import com.tangem.feature.swap.models.CancelPermissionButton -import com.tangem.feature.swap.models.SwapPermissionStateHolder +import com.tangem.feature.swap.models.SwapPermissionState import com.tangem.feature.swap.presentation.R @Composable fun SwapPermissionBottomSheetContent( - data: SwapPermissionStateHolder?, + data: SwapPermissionState.ReadyForRequest?, onCancel: () -> Unit, ) { Column( @@ -209,7 +209,7 @@ fun Preview_AgreementBottomSheet_InDarkTheme() { } } -private val previewData = SwapPermissionStateHolder( +private val previewData = SwapPermissionState.ReadyForRequest( currency = "DAI", amount = "∞", walletAddress = "", diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapScreen.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapScreen.kt index e49409bd4e..d93ee56774 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapScreen.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapScreen.kt @@ -11,6 +11,7 @@ import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.res.stringResource import com.tangem.core.ui.components.appbar.AppBarWithBackButton import com.tangem.core.ui.res.TangemTheme +import com.tangem.feature.swap.models.SwapPermissionState import com.tangem.feature.swap.models.SwapStateHolder import com.tangem.feature.swap.presentation.R import kotlinx.coroutines.launch @@ -34,7 +35,7 @@ internal fun SwapScreen(stateHolder: SwapStateHolder) { }, sheetContent = { SwapPermissionBottomSheetContent( - data = stateHolder.permissionState, + data = stateHolder.permissionState as? SwapPermissionState.ReadyForRequest, onCancel = { coroutineScope.launch { bottomSheetScaffoldState.bottomSheetState.collapse() } }, ) }, @@ -51,7 +52,7 @@ internal fun SwapScreen(stateHolder: SwapStateHolder) { onPermissionWarningClick = { coroutineScope.launch { if (bottomSheetScaffoldState.bottomSheetState.isCollapsed - && stateHolder.permissionState != null + && stateHolder.permissionState is SwapPermissionState.ReadyForRequest ) { bottomSheetScaffoldState.bottomSheetState.expand() } else { diff --git a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapScreenContent.kt b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapScreenContent.kt index 41c04fcfbd..a0475d02a6 100644 --- a/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapScreenContent.kt +++ b/features/swap/presentation/src/main/java/com/tangem/feature/swap/ui/SwapScreenContent.kt @@ -14,6 +14,7 @@ import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.shape.CircleShape import androidx.compose.foundation.verticalScroll import androidx.compose.material.Card +import androidx.compose.material.CircularProgressIndicator import androidx.compose.material.ExperimentalMaterialApi import androidx.compose.material.Icon import androidx.compose.material.MaterialTheme @@ -27,6 +28,7 @@ import androidx.compose.ui.res.painterResource import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview +import com.tangem.core.ui.components.CardWithIcon import com.tangem.core.ui.components.ClickableWarningCard import com.tangem.core.ui.components.Keyboard import com.tangem.core.ui.components.PrimaryButtonIconRight @@ -39,6 +41,7 @@ import com.tangem.core.ui.res.TangemTheme import com.tangem.feature.swap.models.FeeState import com.tangem.feature.swap.models.SwapButton import com.tangem.feature.swap.models.SwapCardData +import com.tangem.feature.swap.models.SwapPermissionState import com.tangem.feature.swap.models.SwapStateHolder import com.tangem.feature.swap.models.SwapWarning import com.tangem.feature.swap.models.TransactionCardType @@ -84,6 +87,21 @@ internal fun SwapScreenContent( ) } + if (state.permissionState is SwapPermissionState.InProgress) { + CardWithIcon( + title = stringResource(id = R.string.swapping_pending_transaction_title), + description = stringResource(id = R.string.swapping_pending_transaction_subtitle), + icon = { + CircularProgressIndicator( + modifier = Modifier + .size(TangemTheme.dimens.size16), + color = TangemTheme.colors.icon.primary1, + strokeWidth = TangemTheme.dimens.size2, + ) + }, + ) + } + PrimaryButtonIconRight( modifier = Modifier.fillMaxWidth(), text = stringResource(id = R.string.swapping_swap), @@ -261,6 +279,7 @@ private val state = SwapStateHolder( networkCurrency = "MATIC", swapButton = SwapButton(enabled = true, loading = false, onClick = {}), onRefresh = {}, onBackClicked = {}, onChangeCardsClicked = {}, + permissionState = SwapPermissionState.InProgress, ) @Preview