Updated on 2026-08-14

This commit is contained in:
Tangem 2024-08-26 22:26:45 +03:00
parent 6f80bdb636
commit 5f338d293b
9 changed files with 202 additions and 26 deletions

View file

@ -55,8 +55,10 @@ internal fun AddToPortfolioBottomSheet(config: TangemBottomSheetConfig) {
) {
Content(
modifier = Modifier.fillMaxWidth(),
state = config.content as AddToPortfolioBSContentUM,
state = it,
)
WalletSelectorBottomSheet(it.walletSelectorConfig)
}
}

View file

@ -69,6 +69,8 @@ internal fun MyPortfolio(state: MyPortfolioUM, modifier: Modifier = Modifier) {
MyPortfolioUM.Unavailable -> UnavailableContent()
}
}
AddToPortfolioBottomSheet(state.addToPortfolioBS)
}
@Composable
@ -112,7 +114,7 @@ private fun AddFirstTokenContent(state: MyPortfolioUM.AddFirstToken, modifier: M
verticalArrangement = Arrangement.spacedBy(TangemTheme.dimens.spacing12),
) {
Text(
text = "To start buying, exchanging or receiving this asset, add this token to at least 1 network",
text = "To start buying, exchanging or receiving this asset, add this token to at least 1 network", // FIXME
style = TangemTheme.typography.body2,
color = TangemTheme.colors.text.tertiary,
)

View file

@ -18,12 +18,12 @@ import com.tangem.core.ui.components.inputrow.inner.DividerContainer
import com.tangem.core.ui.components.rows.CornersToRound
import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.res.TangemThemePreview
import com.tangem.features.markets.portfolio.impl.ui.state.TokenActionsBSContent
import com.tangem.features.markets.portfolio.impl.ui.state.TokenActionsBSContentUM
import kotlinx.collections.immutable.toImmutableList
@Composable
fun TokenActionsBottomSheet(config: TangemBottomSheetConfig) {
TangemBottomSheet<TokenActionsBSContent>(
TangemBottomSheet<TokenActionsBSContentUM>(
config = config,
title = { content ->
TangemBottomSheetTitle(content.title)
@ -34,7 +34,7 @@ fun TokenActionsBottomSheet(config: TangemBottomSheetConfig) {
}
@Composable
private fun Content(content: TokenActionsBSContent) {
private fun Content(content: TokenActionsBSContentUM) {
Column(
modifier = Modifier
.padding(
@ -78,9 +78,9 @@ private fun Preview() {
TangemBottomSheetConfig(
isShow = true,
onDismissRequest = {},
content = TokenActionsBSContent(
content = TokenActionsBSContentUM(
title = "Wallet 1",
actions = TokenActionsBSContent.Action.entries.toImmutableList(),
actions = TokenActionsBSContentUM.Action.entries.toImmutableList(),
onActionClick = {},
),
),

View file

@ -0,0 +1,142 @@
package com.tangem.features.markets.portfolio.impl.ui
import android.content.res.Configuration
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.verticalScroll
import androidx.compose.runtime.Composable
import androidx.compose.runtime.key
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.tooling.preview.Preview
import com.tangem.common.ui.userwallet.UserWalletItem
import com.tangem.common.ui.userwallet.state.UserWalletItemUM
import com.tangem.core.ui.components.SpacerH
import com.tangem.core.ui.components.appbar.TangemTopAppBar
import com.tangem.core.ui.components.appbar.TangemTopAppBarHeight
import com.tangem.core.ui.components.appbar.models.TopAppBarButtonUM
import com.tangem.core.ui.components.block.BlockCard
import com.tangem.core.ui.components.block.TangemBlockCardColors
import com.tangem.core.ui.components.bottomsheets.TangemBottomSheet
import com.tangem.core.ui.components.bottomsheets.TangemBottomSheetConfig
import com.tangem.core.ui.extensions.resourceReference
import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.res.TangemThemePreview
import com.tangem.features.markets.impl.R
import com.tangem.features.markets.portfolio.impl.ui.preview.PreviewAddToPortfolioBSContentProvider
import com.tangem.features.markets.portfolio.impl.ui.state.WalletSelectorBSContentUM
import kotlinx.collections.immutable.persistentListOf
@Composable
internal fun WalletSelectorBottomSheet(config: TangemBottomSheetConfig) {
TangemBottomSheet<WalletSelectorBSContentUM>(
config = config,
containerColor = TangemTheme.colors.background.tertiary,
addBottomInsets = false,
title = { content ->
TangemTopAppBar(
title = resourceReference(R.string.manage_tokens_wallet_selector_title),
titleAlignment = Alignment.CenterHorizontally,
startButton = TopAppBarButtonUM.Back(content.onBack),
height = TangemTopAppBarHeight.BOTTOM_SHEET,
)
},
) { content ->
Content(
modifier = Modifier
.fillMaxSize()
.padding(
horizontal = TangemTheme.dimens.spacing16,
vertical = TangemTheme.dimens.spacing8,
),
state = content,
)
}
}
@Composable
private fun Content(state: WalletSelectorBSContentUM, modifier: Modifier = Modifier) {
val bottomBarHeight = with(LocalDensity.current) { WindowInsets.systemBars.getBottom(this).toDp() }
Column(
modifier = modifier
.verticalScroll(rememberScrollState()),
) {
BlockCard(
modifier = Modifier.fillMaxSize(),
colors = TangemBlockCardColors.copy(
containerColor = TangemTheme.colors.background.action,
disabledContainerColor = TangemTheme.colors.background.action,
),
) {
state.userWallets.forEach { state ->
key(state.id) {
UserWalletItem(
modifier = Modifier.fillMaxWidth(),
blockColors = TangemBlockCardColors.copy(
containerColor = TangemTheme.colors.background.action,
disabledContainerColor = TangemTheme.colors.background.action,
),
state = state,
)
}
}
}
SpacerH(bottomBarHeight)
}
}
@Preview
@Preview(uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
private fun Preview() {
TangemThemePreview {
WalletSelectorBottomSheet(
config = TangemBottomSheetConfig(
isShow = true,
onDismissRequest = {},
content = WalletSelectorBSContentUM(
userWallets = persistentListOf(
PreviewAddToPortfolioBSContentProvider().userWallet.copy(
endIcon = UserWalletItemUM.EndIcon.None,
),
PreviewAddToPortfolioBSContentProvider().userWallet.copy(
endIcon = UserWalletItemUM.EndIcon.Checkmark,
),
PreviewAddToPortfolioBSContentProvider().userWallet.copy(
endIcon = UserWalletItemUM.EndIcon.None,
),
),
onBack = {},
onWalletSelected = {},
),
),
)
}
}
@Preview
@Preview(uiMode = Configuration.UI_MODE_NIGHT_YES)
@Composable
private fun PreviewContent() {
TangemThemePreview {
Content(
state = WalletSelectorBSContentUM(
userWallets = persistentListOf(
PreviewAddToPortfolioBSContentProvider().userWallet.copy(
endIcon = UserWalletItemUM.EndIcon.None,
),
PreviewAddToPortfolioBSContentProvider().userWallet.copy(
endIcon = UserWalletItemUM.EndIcon.Checkmark,
),
PreviewAddToPortfolioBSContentProvider().userWallet.copy(
endIcon = UserWalletItemUM.EndIcon.None,
),
),
onBack = {},
onWalletSelected = {},
),
)
}
}

View file

@ -2,6 +2,8 @@ package com.tangem.features.markets.portfolio.impl.ui.preview
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import com.tangem.common.ui.userwallet.state.UserWalletItemUM
import com.tangem.core.ui.components.bottomsheets.TangemBottomSheetConfig
import com.tangem.core.ui.components.bottomsheets.TangemBottomSheetConfigContent
import com.tangem.core.ui.components.rows.model.BlockchainRowUM
import com.tangem.core.ui.extensions.stringReference
import com.tangem.domain.wallets.models.UserWalletId
@ -20,18 +22,20 @@ internal class PreviewAddToPortfolioBSContentProvider : PreviewParameterProvider
isSelected = false,
)
val userWallet = UserWalletItemUM(
id = UserWalletId("1"),
name = stringReference("Wallet 1"),
information = stringReference("3 cards, 10,123$"),
imageUrl = "",
isEnabled = true,
endIcon = UserWalletItemUM.EndIcon.Arrow,
onClick = {},
)
override val values: Sequence<AddToPortfolioBSContentUM>
get() = sequenceOf(
AddToPortfolioBSContentUM(
selectedWallet = UserWalletItemUM(
id = UserWalletId("1"),
name = stringReference("Wallet 1"),
information = stringReference("3 cards, 10,123$"),
imageUrl = "",
isEnabled = true,
endIcon = UserWalletItemUM.EndIcon.Arrow,
onClick = {},
),
selectedWallet = userWallet,
selectNetworkUM = SelectNetworkUM(
tokenId = "etherium",
tokenName = "Etherium",
@ -51,17 +55,15 @@ internal class PreviewAddToPortfolioBSContentProvider : PreviewParameterProvider
isScanCardNotificationVisible = true,
continueButtonEnabled = true,
onContinueButtonClick = {},
walletSelectorConfig = TangemBottomSheetConfig(
isShow = false,
onDismissRequest = {},
content = TangemBottomSheetConfigContent.Empty,
),
onWalletClick = {},
),
AddToPortfolioBSContentUM(
selectedWallet = UserWalletItemUM(
id = UserWalletId("1"),
name = stringReference("Wallet 1"),
information = stringReference("3 cards, 10,123$"),
imageUrl = "",
isEnabled = true,
endIcon = UserWalletItemUM.EndIcon.Arrow,
onClick = {},
),
selectedWallet = userWallet,
selectNetworkUM = SelectNetworkUM(
tokenId = "etherium",
tokenName = "Etherium",
@ -81,6 +83,12 @@ internal class PreviewAddToPortfolioBSContentProvider : PreviewParameterProvider
isScanCardNotificationVisible = true,
continueButtonEnabled = false,
onContinueButtonClick = {},
walletSelectorConfig = TangemBottomSheetConfig(
isShow = false,
onDismissRequest = {},
content = TangemBottomSheetConfigContent.Empty,
),
onWalletClick = {},
),
)
}

View file

@ -1,6 +1,7 @@
package com.tangem.features.markets.portfolio.impl.ui.state
import com.tangem.common.ui.userwallet.state.UserWalletItemUM
import com.tangem.core.ui.components.bottomsheets.TangemBottomSheetConfig
import com.tangem.core.ui.components.bottomsheets.TangemBottomSheetConfigContent
internal data class AddToPortfolioBSContentUM(
@ -9,4 +10,6 @@ internal data class AddToPortfolioBSContentUM(
val isScanCardNotificationVisible: Boolean,
val continueButtonEnabled: Boolean,
val onContinueButtonClick: () -> Unit,
val onWalletClick: () -> Unit,
val walletSelectorConfig: TangemBottomSheetConfig,
) : TangemBottomSheetConfigContent

View file

@ -1,11 +1,19 @@
package com.tangem.features.markets.portfolio.impl.ui.state
import androidx.compose.runtime.Immutable
import com.tangem.core.ui.components.bottomsheets.TangemBottomSheetConfig
import com.tangem.core.ui.components.bottomsheets.TangemBottomSheetConfigContent
import kotlinx.collections.immutable.ImmutableList
@Immutable
internal sealed class MyPortfolioUM {
val addToPortfolioBS: TangemBottomSheetConfig = TangemBottomSheetConfig(
isShow = false,
onDismissRequest = {},
content = TangemBottomSheetConfigContent.Empty,
)
data class Tokens(
val tokens: ImmutableList<PortfolioTokenUM>,
val buttonState: AddButtonState,

View file

@ -7,7 +7,7 @@ import com.tangem.core.ui.extensions.resourceReference
import com.tangem.features.markets.impl.R
import kotlinx.collections.immutable.ImmutableList
internal data class TokenActionsBSContent(
internal data class TokenActionsBSContentUM(
val title: String,
val actions: ImmutableList<Action>,
val onActionClick: (Action) -> Unit,

View file

@ -0,0 +1,11 @@
package com.tangem.features.markets.portfolio.impl.ui.state
import com.tangem.common.ui.userwallet.state.UserWalletItemUM
import com.tangem.core.ui.components.bottomsheets.TangemBottomSheetConfigContent
import kotlinx.collections.immutable.ImmutableList
internal data class WalletSelectorBSContentUM(
val userWallets: ImmutableList<UserWalletItemUM>,
val onWalletSelected: (UserWalletItemUM) -> Unit,
val onBack: () -> Unit,
) : TangemBottomSheetConfigContent