diff --git a/app/src/main/java/com/tangem/tap/features/walletSelector/ui/WalletSelectorBottomSheetFragment.kt b/app/src/main/java/com/tangem/tap/features/walletSelector/ui/WalletSelectorBottomSheetFragment.kt index 47c6ca9bf2..3637f2ea5e 100644 --- a/app/src/main/java/com/tangem/tap/features/walletSelector/ui/WalletSelectorBottomSheetFragment.kt +++ b/app/src/main/java/com/tangem/tap/features/walletSelector/ui/WalletSelectorBottomSheetFragment.kt @@ -5,15 +5,12 @@ import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.material.SnackbarHost import androidx.compose.material.SnackbarHostState -import androidx.compose.runtime.Composable -import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.State -import androidx.compose.runtime.collectAsState -import androidx.compose.runtime.getValue -import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberUpdatedState +import androidx.compose.runtime.* import androidx.compose.ui.Alignment +import androidx.compose.ui.ExperimentalComposeUiApi import androidx.compose.ui.Modifier +import androidx.compose.ui.input.nestedscroll.nestedScroll +import androidx.compose.ui.platform.rememberNestedScrollInteropConnection import androidx.fragment.app.viewModels import com.tangem.core.ui.fragments.ComposeBottomSheetFragment import com.tangem.core.ui.res.TangemTheme @@ -29,6 +26,7 @@ internal class WalletSelectorBottomSheetFragment : ComposeBottomSheetFragment = listOf(), + val multiCurrencyWallets: List = emptyList(), + val singleCurrencyWallets: List = emptyList(), val selectedWalletId: String? = null, - val fiatCurrency: FiatCurrency = FiatCurrency.Default, - val isLocked: Boolean = true, + val isLocked: Boolean = false, val editingWalletsIds: List = listOf(), val renameWalletDialog: RenameWalletDialog? = null, val showAddCardProgress: Boolean = false, diff --git a/app/src/main/java/com/tangem/tap/features/walletSelector/ui/WalletSelectorViewModel.kt b/app/src/main/java/com/tangem/tap/features/walletSelector/ui/WalletSelectorViewModel.kt index cb6d75b0b0..fcb8f32c7e 100644 --- a/app/src/main/java/com/tangem/tap/features/walletSelector/ui/WalletSelectorViewModel.kt +++ b/app/src/main/java/com/tangem/tap/features/walletSelector/ui/WalletSelectorViewModel.kt @@ -60,7 +60,8 @@ internal class WalletSelectorViewModel : ViewModel(), StoreSubscriber, + singleCurrencyWallets: List, + selectedWalletId: String?, + checkedWalletIds: List, + isLocked: Boolean, + onWalletClick: (walletId: String) -> Unit, + onWalletLongClick: (walletId: String) -> Unit, +) { + Column(modifier = modifier) { + val walletsSection = @Composable { wallets: List -> + wallets.forEachIndexed { index, wallet -> + if (index == 0) { + Text( + modifier = Modifier.padding(start = TangemTheme.dimens.spacing16), + text = wallet.headerText.resolveReference(), + style = TangemTheme.typography.subtitle2, + color = TangemTheme.colors.text.tertiary, + ) + } + WalletItem( + modifier = Modifier + .combinedClickable( + onClick = { onWalletClick(wallet.id) }, + onLongClick = { onWalletLongClick(wallet.id) }, + ) + .padding(all = TangemTheme.dimens.spacing16), + wallet = wallet, + isSelected = wallet.id == selectedWalletId, + isChecked = wallet.id in checkedWalletIds, + isLocked = isLocked && wallet.id != selectedWalletId, + ) + } + } + + walletsSection(multiCurrencyWallets) + walletsSection(singleCurrencyWallets) + } +} + // region Preview @Composable private fun WalletSelectorScreenContentSample( @@ -221,7 +263,7 @@ private fun WalletSelectorScreenContent_EditWallets_Sample( shape = TangemTheme.shapes.bottomSheet, ), state = MockData.state - .copy(editingWalletsIds = listOf(MockData.userWalletList[2].id)), + .copy(editingWalletsIds = listOf(MockData.state.multiCurrencyWallets[2].id)), onWalletClick = { /* no-op */ }, onWalletLongClick = { /* no-op */ }, onUnlockClick = { /* no-op */ }, diff --git a/app/src/main/java/com/tangem/tap/features/walletSelector/ui/components/WalletList.kt b/app/src/main/java/com/tangem/tap/features/walletSelector/ui/components/WalletList.kt deleted file mode 100644 index ab1f4f9c40..0000000000 --- a/app/src/main/java/com/tangem/tap/features/walletSelector/ui/components/WalletList.kt +++ /dev/null @@ -1,66 +0,0 @@ -@file:OptIn(ExperimentalFoundationApi::class) - -package com.tangem.tap.features.walletSelector.ui.components - -import androidx.compose.foundation.ExperimentalFoundationApi -import androidx.compose.foundation.combinedClickable -import androidx.compose.foundation.layout.padding -import androidx.compose.foundation.lazy.LazyColumn -import androidx.compose.foundation.lazy.itemsIndexed -import androidx.compose.material.Text -import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember -import androidx.compose.ui.Modifier -import com.tangem.core.ui.res.TangemTheme -import com.tangem.tap.features.details.ui.cardsettings.resolveReference -import com.tangem.tap.features.walletSelector.ui.model.UserWalletItem - -@Composable -internal fun WalletList( - modifier: Modifier = Modifier, - wallets: List, - selectedWalletId: String?, - checkedWalletIds: List, - isLocked: Boolean, - onWalletClick: (walletId: String) -> Unit, - onWalletLongClick: (walletId: String) -> Unit, -) { - val multiCurrencyWallets = remember(wallets) { - wallets.filter { it.type is UserWalletItem.Type.MultiCurrency } - } - val singleCurrencyWallets = remember(wallets) { - wallets.filter { it.type is UserWalletItem.Type.SingleCurrency } - } - LazyColumn(modifier = modifier) { - val walletSection: (List) -> Unit = { wallets -> - itemsIndexed( - items = wallets, - key = { _, item -> item.id }, - ) { index, wallet -> - if (index == 0) { - Text( - modifier = Modifier.padding(start = TangemTheme.dimens.spacing16), - text = wallet.type.headerText.resolveReference(), - style = TangemTheme.typography.subtitle2, - color = TangemTheme.colors.text.tertiary, - ) - } - WalletItem( - modifier = Modifier - .combinedClickable( - onClick = { onWalletClick(wallet.id) }, - onLongClick = { onWalletLongClick(wallet.id) }, - ) - .padding(all = TangemTheme.dimens.spacing16), - wallet = wallet, - isSelected = wallet.id == selectedWalletId, - isChecked = wallet.id in checkedWalletIds, - isLocked = isLocked && wallet.id != selectedWalletId, - ) - } - } - - walletSection(multiCurrencyWallets) - walletSection(singleCurrencyWallets) - } -} \ No newline at end of file diff --git a/app/src/main/java/com/tangem/tap/features/walletSelector/ui/model/UserWalletItem.kt b/app/src/main/java/com/tangem/tap/features/walletSelector/ui/model/UserWalletItem.kt index 41f0ace5cd..cadbde80db 100644 --- a/app/src/main/java/com/tangem/tap/features/walletSelector/ui/model/UserWalletItem.kt +++ b/app/src/main/java/com/tangem/tap/features/walletSelector/ui/model/UserWalletItem.kt @@ -5,42 +5,38 @@ import com.tangem.tap.features.details.ui.cardsettings.TextReference import com.tangem.wallet.R @Immutable -internal data class UserWalletItem( - val id: String, - val name: String, - val imageUrl: String, - val balance: Balance, - val type: Type, -) { +internal sealed interface UserWalletItem { + val id: String + val name: String + val imageUrl: String + val balance: Balance + + val headerText: TextReference + get() = when (this) { + is MultiCurrencyUserWalletItem -> TextReference.Res(R.string.user_wallet_list_multi_header) + is SingleCurrencyUserWalletItem -> TextReference.Res(R.string.user_wallet_list_single_header) + } + @Immutable data class Balance( val amount: String, val isLoading: Boolean, - ) { - companion object { - val Loading = Balance( - amount = "0.00", - isLoading = true, - ) - } - } + ) +} - sealed interface Type { - val headerText: TextReference +internal data class MultiCurrencyUserWalletItem( + override val id: String, + override val name: String, + override val imageUrl: String, + override val balance: UserWalletItem.Balance, + val tokensCount: Int, + val cardsInWallet: Int, +) : UserWalletItem - @Immutable - class MultiCurrency( - val tokensCount: Int, - val cardsInWallet: Int, - ) : Type { - override val headerText: TextReference - get() = TextReference.Res(R.string.user_wallet_list_multi_header) - } - - @Immutable - class SingleCurrency(val tokenName: String) : Type { - override val headerText: TextReference - get() = TextReference.Res(R.string.user_wallet_list_single_header) - } - } -} \ No newline at end of file +internal data class SingleCurrencyUserWalletItem( + override val id: String, + override val name: String, + override val imageUrl: String, + override val balance: UserWalletItem.Balance, + val tokenName: String, +) : UserWalletItem \ No newline at end of file