Updated on 2026-08-14
This commit is contained in:
parent
2fd73f5a50
commit
6004b030a7
8 changed files with 57 additions and 6 deletions
|
|
@ -356,6 +356,7 @@ internal object WalletPreviewData {
|
|||
),
|
||||
bottomSheetConfig = bottomSheet,
|
||||
tokenActionsBottomSheet = actionsBottomSheet,
|
||||
onManageTokensClick = {},
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
}
|
||||
|
|
@ -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(
|
||||
|
|
|
|||
|
|
@ -52,6 +52,7 @@ internal class WalletSkeletonStateConverter(
|
|||
notifications = persistentListOf(),
|
||||
bottomSheetConfig = null,
|
||||
tokenActionsBottomSheet = null,
|
||||
onManageTokensClick = clickIntents::onManageTokensClick,
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -52,4 +52,6 @@ internal interface WalletClickIntents : TxHistoryClickIntents {
|
|||
fun onReceiveClick()
|
||||
|
||||
fun onSellClick()
|
||||
|
||||
fun onManageTokensClick()
|
||||
}
|
||||
|
|
@ -479,6 +479,10 @@ internal class WalletViewModel @Inject constructor(
|
|||
)
|
||||
}
|
||||
|
||||
override fun onManageTokensClick() {
|
||||
router.openManageTokensScreen()
|
||||
}
|
||||
|
||||
override fun onReloadClick() {
|
||||
uiState = stateFactory.getStateAfterContentRefreshing()
|
||||
updateSingleCurrencyContent(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue