Updated on 2026-08-14

This commit is contained in:
Tangem 2023-08-29 17:28:04 +08:00
parent 2fd73f5a50
commit 6004b030a7
8 changed files with 57 additions and 6 deletions

View file

@ -356,6 +356,7 @@ internal object WalletPreviewData {
),
bottomSheetConfig = bottomSheet,
tokenActionsBottomSheet = actionsBottomSheet,
onManageTokensClick = {},
)
}

View file

@ -117,12 +117,20 @@ internal class DefaultWalletRouter(private val reduxNavController: ReduxNavContr
)
}
override fun openStoriesScreen() {
reduxNavController.navigate(action = NavigationAction.NavigateTo(screen = AppScreen.Home))
}
override fun openSaveUserWalletScreen() {
reduxNavController.navigate(action = NavigationAction.NavigateTo(AppScreen.SaveWallet))
}
override fun isWalletLastScreen(): Boolean = reduxNavController.getBackStack().lastOrNull() == AppScreen.Wallet
override fun openManageTokensScreen() {
reduxNavController.navigate(action = NavigationAction.NavigateTo(AppScreen.AddTokens))
}
private companion object {
const val BACKSTACK_ENTRY_COUNT_TO_CLOSE_WALLET_SCREEN = 2
}

View file

@ -46,9 +46,15 @@ internal interface InnerWalletRouter : WalletRouter {
/** Open token details screen */
fun openTokenDetails(currency: CryptoCurrency)
/** Open stories screen */
fun openStoriesScreen()
/** Open save user wallet screen */
fun openSaveUserWalletScreen()
/** Is wallet last screen */
fun isWalletLastScreen(): Boolean
/** Open manage tokens screen */
fun openManageTokensScreen()
}

View file

@ -23,6 +23,7 @@ internal sealed class WalletMultiCurrencyState : WalletState.ContentState() {
override val bottomSheetConfig: WalletBottomSheetConfig?,
override val tokensListState: WalletTokensListState,
val tokenActionsBottomSheet: ActionsBottomSheetConfig?,
val onManageTokensClick: () -> Unit,
) : WalletMultiCurrencyState()
data class Locked(

View file

@ -52,6 +52,7 @@ internal class WalletSkeletonStateConverter(
notifications = persistentListOf(),
bottomSheetConfig = null,
tokenActionsBottomSheet = null,
onManageTokensClick = clickIntents::onManageTokensClick,
)
}

View file

@ -12,12 +12,15 @@ import androidx.compose.material3.*
import androidx.compose.runtime.*
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.tooling.preview.datasource.CollectionPreviewParameterProvider
import androidx.paging.compose.collectAsLazyPagingItems
import com.tangem.core.ui.components.PrimaryButton
import com.tangem.core.ui.components.transactions.state.TxHistoryState
import com.tangem.core.ui.res.TangemTheme
import com.tangem.feature.wallet.impl.R
import com.tangem.feature.wallet.presentation.common.WalletPreviewData
import com.tangem.feature.wallet.presentation.wallet.state.WalletMultiCurrencyState
import com.tangem.feature.wallet.presentation.wallet.state.WalletSingleCurrencyState
@ -53,11 +56,7 @@ internal fun WalletScreen(state: WalletState) {
private fun WalletContent(state: WalletState.ContentState) {
val walletsListState = rememberLazyListState()
Scaffold(
topBar = { WalletTopBar(config = state.topBarConfig) },
containerColor = TangemTheme.colors.background.secondary,
) { scaffoldPaddings ->
BaseScaffold(state = state) { scaffoldPaddings ->
val movableItemModifier = Modifier.changeWalletAnimator(walletsListState)
val pullRefreshState = rememberPullRefreshState(
refreshing = state.pullToRefreshConfig.isRefreshing,
@ -85,7 +84,10 @@ private fun WalletContent(state: WalletState.ContentState) {
LazyColumn(
modifier = Modifier.fillMaxSize(),
contentPadding = PaddingValues(vertical = TangemTheme.dimens.spacing8),
contentPadding = PaddingValues(
top = TangemTheme.dimens.spacing8,
bottom = TangemTheme.dimens.spacing92,
),
horizontalAlignment = Alignment.CenterHorizontally,
) {
item {
@ -128,6 +130,32 @@ private fun WalletContent(state: WalletState.ContentState) {
WalletSideEffects(lazyListState = walletsListState, walletsListConfig = state.walletsListConfig)
}
@Composable
private fun BaseScaffold(state: WalletState.ContentState, content: @Composable (PaddingValues) -> Unit) {
Scaffold(
topBar = { WalletTopBar(config = state.topBarConfig) },
floatingActionButton = {
if (state is WalletMultiCurrencyState.Content) {
ManageTokensButton(onManageTokensClick = state.onManageTokensClick)
}
},
floatingActionButtonPosition = FabPosition.Center,
containerColor = TangemTheme.colors.background.secondary,
content = content,
)
}
@Composable
private fun ManageTokensButton(onManageTokensClick: () -> Unit) {
PrimaryButton(
text = stringResource(id = R.string.main_manage_tokens),
onClick = onManageTokensClick,
modifier = Modifier
.fillMaxWidth()
.padding(horizontal = TangemTheme.dimens.spacing16),
)
}
@Composable
private fun WalletBottomSheets(state: WalletState) {
val bottomSheetConfig = (state as? WalletState.ContentState)?.bottomSheetConfig

View file

@ -52,4 +52,6 @@ internal interface WalletClickIntents : TxHistoryClickIntents {
fun onReceiveClick()
fun onSellClick()
fun onManageTokensClick()
}

View file

@ -479,6 +479,10 @@ internal class WalletViewModel @Inject constructor(
)
}
override fun onManageTokensClick() {
router.openManageTokensScreen()
}
override fun onReloadClick() {
uiState = stateFactory.getStateAfterContentRefreshing()
updateSingleCurrencyContent(