diff --git a/core/res/src/main/res/values/strings.xml b/core/res/src/main/res/values/strings.xml index 0559b57bcc..020371fd62 100644 --- a/core/res/src/main/res/values/strings.xml +++ b/core/res/src/main/res/values/strings.xml @@ -86,6 +86,7 @@ Error Exchange Explore transaction history + Explore Explorer Speed and fee Network transaction fees are used to support network security, incentivize validators, allocate resources, and determine transaction priority diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/transactions/TransactionList.kt b/core/ui/src/main/java/com/tangem/core/ui/components/transactions/TransactionList.kt index a2223d835c..5920e09e81 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/transactions/TransactionList.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/transactions/TransactionList.kt @@ -50,7 +50,7 @@ fun LazyListScope.txHistoryItems( is TxHistoryState.Error -> { nonContentItem( state = EmptyTransactionsBlockState.FailedToLoad( - onClick = state.onReloadClick, + onReload = state.onReloadClick, onExplore = state.onExploreClick, ), modifier = modifier, @@ -64,7 +64,7 @@ fun LazyListScope.txHistoryItems( } nonContentItem( - state = EmptyTransactionsBlockState.NotImplemented(onClick = state.onExploreClick), + state = EmptyTransactionsBlockState.NotImplemented(onExplore = state.onExploreClick), modifier = modifier, ) } diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/transactions/empty/EmptyTransactionBlock.kt b/core/ui/src/main/java/com/tangem/core/ui/components/transactions/empty/EmptyTransactionBlock.kt index e3144d6ba8..7f85f98d19 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/transactions/empty/EmptyTransactionBlock.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/transactions/empty/EmptyTransactionBlock.kt @@ -14,7 +14,6 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.tooling.preview.PreviewParameter import androidx.compose.ui.tooling.preview.datasource.CollectionPreviewParameterProvider import com.tangem.core.ui.components.buttons.actions.ActionButton -import com.tangem.core.ui.components.transactions.TxHistoryTitle import com.tangem.core.ui.extensions.resolveReference import com.tangem.core.ui.res.TangemTheme @@ -29,32 +28,59 @@ fun EmptyTransactionBlock(state: EmptyTransactionsBlockState, modifier: Modifier Column( modifier = modifier .clip(TangemTheme.shapes.roundedCornersXMedium) - .background(color = TangemTheme.colors.background.primary), + .background(color = TangemTheme.colors.background.primary) + .padding(vertical = TangemTheme.dimens.spacing24), + verticalArrangement = Arrangement.spacedBy(TangemTheme.dimens.spacing24), horizontalAlignment = Alignment.CenterHorizontally, ) { - if (state.onExploreClick != null) { - TxHistoryTitle(onExploreClick = state.onExploreClick, modifier = Modifier.fillMaxWidth()) - } Image( - modifier = Modifier - .padding(top = TangemTheme.dimens.spacing24) - .size(TangemTheme.dimens.size64), + modifier = Modifier.size(TangemTheme.dimens.size64), painter = painterResource(id = state.iconRes), contentDescription = null, ) Text( - modifier = Modifier - .padding(horizontal = TangemTheme.dimens.spacing32, vertical = TangemTheme.dimens.spacing24), + modifier = Modifier.padding(horizontal = TangemTheme.dimens.spacing32), textAlign = TextAlign.Center, text = state.text.resolveReference(), style = TangemTheme.typography.body2, color = TangemTheme.colors.text.secondary, ) - state.actionButtonConfig?.let { - ActionButton(config = it, modifier = Modifier.padding(bottom = TangemTheme.dimens.spacing24)) - } + Buttons( + modifier = Modifier.padding(horizontal = TangemTheme.dimens.spacing18), + state = state.buttonsState, + ) + } +} + +@Composable +private fun Buttons(state: EmptyTransactionsBlockState.ButtonsState, modifier: Modifier = Modifier) { + when (state) { + is EmptyTransactionsBlockState.ButtonsState.SingleButton -> SingleButton(state = state, modifier = modifier) + is EmptyTransactionsBlockState.ButtonsState.PairButtons -> PairButtons(state = state, modifier = modifier) + } +} + +@Composable +private fun SingleButton(state: EmptyTransactionsBlockState.ButtonsState.SingleButton, modifier: Modifier = Modifier) { + ActionButton(modifier = modifier, config = state.actionButtonConfig) +} + +@Composable +private fun PairButtons(state: EmptyTransactionsBlockState.ButtonsState.PairButtons, modifier: Modifier = Modifier) { + Row( + modifier = modifier, + horizontalArrangement = Arrangement.spacedBy(TangemTheme.dimens.spacing8), + ) { + ActionButton( + modifier = Modifier.weight(1F), + config = state.firstButtonConfig, + ) + ActionButton( + modifier = Modifier.weight(1F), + config = state.secondButtonConfig, + ) } } @@ -81,7 +107,7 @@ private fun EmptyTransactionBlock_Dark( private class EmptyTransactionBlockStateProvider : CollectionPreviewParameterProvider( collection = listOf( EmptyTransactionsBlockState.Empty {}, - EmptyTransactionsBlockState.FailedToLoad(onClick = {}, onExplore = {}), - EmptyTransactionsBlockState.NotImplemented(onClick = {}), + EmptyTransactionsBlockState.FailedToLoad(onReload = {}, onExplore = {}), + EmptyTransactionsBlockState.NotImplemented(onExplore = {}), ), ) \ No newline at end of file diff --git a/core/ui/src/main/java/com/tangem/core/ui/components/transactions/empty/EmptyTransactionsBlockState.kt b/core/ui/src/main/java/com/tangem/core/ui/components/transactions/empty/EmptyTransactionsBlockState.kt index bf70218eaf..8254baa582 100644 --- a/core/ui/src/main/java/com/tangem/core/ui/components/transactions/empty/EmptyTransactionsBlockState.kt +++ b/core/ui/src/main/java/com/tangem/core/ui/components/transactions/empty/EmptyTransactionsBlockState.kt @@ -5,42 +5,64 @@ import com.tangem.core.ui.components.buttons.actions.ActionButtonConfig import com.tangem.core.ui.extensions.TextReference sealed class EmptyTransactionsBlockState( - val actionButtonConfig: ActionButtonConfig? = null, + val buttonsState: ButtonsState, val iconRes: Int, val text: TextReference, - val onExploreClick: (() -> Unit)?, ) { + sealed class ButtonsState { + data class SingleButton(val actionButtonConfig: ActionButtonConfig) : ButtonsState() + data class PairButtons( + val firstButtonConfig: ActionButtonConfig, + val secondButtonConfig: ActionButtonConfig, + ) : ButtonsState() + } + data class FailedToLoad( - val onClick: () -> Unit, + val onReload: () -> Unit, val onExplore: () -> Unit, ) : EmptyTransactionsBlockState( - actionButtonConfig = ActionButtonConfig( - text = TextReference.Res(R.string.common_reload), - iconResId = R.drawable.ic_refresh_24, - onClick = onClick, - enabled = true, + buttonsState = ButtonsState.PairButtons( + firstButtonConfig = ActionButtonConfig( + text = TextReference.Res(R.string.common_reload), + iconResId = R.drawable.ic_refresh_24, + onClick = onReload, + enabled = true, + ), + secondButtonConfig = ActionButtonConfig( + text = TextReference.Res(R.string.common_explore), + iconResId = R.drawable.ic_arrow_top_right_24, + onClick = onExplore, + enabled = true, + ), ), iconRes = R.drawable.ic_alert_history_64, text = TextReference.Res(R.string.transaction_history_error_failed_to_load), - onExploreClick = onExplore, ) data class Empty(val onExplore: (() -> Unit)) : EmptyTransactionsBlockState( + buttonsState = ButtonsState.SingleButton( + actionButtonConfig = ActionButtonConfig( + text = TextReference.Res(R.string.common_explore), + iconResId = R.drawable.ic_arrow_top_right_24, + onClick = onExplore, + enabled = true, + ), + ), iconRes = R.drawable.ic_empty_token_64, text = TextReference.Res(R.string.transaction_history_empty_transactions), - onExploreClick = onExplore, ) - data class NotImplemented(val onClick: () -> Unit) : EmptyTransactionsBlockState( - actionButtonConfig = ActionButtonConfig( - text = TextReference.Res(R.string.common_explore_transaction_history), - iconResId = R.drawable.ic_arrow_top_right_24, - onClick = onClick, - enabled = true, + data class NotImplemented(val onExplore: () -> Unit) : EmptyTransactionsBlockState( + buttonsState = ButtonsState.SingleButton( + actionButtonConfig = ActionButtonConfig( + text = TextReference.Res(R.string.common_explore_transaction_history), + iconResId = R.drawable.ic_arrow_top_right_24, + onClick = onExplore, + enabled = true, + ), ), iconRes = R.drawable.ic_compass_64, text = TextReference.Res(R.string.transaction_history_not_supported_description), - onExploreClick = null, ) } \ No newline at end of file