Updated on 2026-08-14

This commit is contained in:
Tangem 2026-05-18 17:58:11 +02:00
parent 2c02943178
commit 0fb4ec70e3
3 changed files with 114 additions and 17 deletions

View file

@ -42,7 +42,7 @@ internal fun SortByMenu(
horizontalArrangement = Arrangement.SpaceBetween,
modifier = Modifier
.fillMaxWidth()
.width(238.dp)
.widthIn(238.dp)
.clickableSingle(
onClick = {
sortMenuUM.onOptionClicked(sortType)

View file

@ -1,13 +1,22 @@
package com.tangem.feature.wallet.child.organizetokens.ui
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.shape.CircleShape
import androidx.compose.material3.HorizontalDivider
import androidx.compose.material3.Icon
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.graphics.vector.rememberVectorPainter
import androidx.compose.ui.res.vectorResource
import androidx.compose.ui.unit.DpOffset
import androidx.compose.ui.unit.dp
import com.tangem.core.ui.ds.contextmenu.TangemContextMenu
import com.tangem.core.ui.ds.contextmenu.TangemContextMenuCheckboxItem
import com.tangem.core.ui.extensions.TextReference
import com.tangem.core.ui.extensions.clickableSingle
import com.tangem.core.ui.extensions.stringResourceSafe
import com.tangem.core.ui.res.TangemTheme
import com.tangem.feature.wallet.child.organizetokens.entity.OrganizeTokensUM
import com.tangem.feature.wallet.impl.R
@ -25,19 +34,104 @@ internal fun OrganizeDropDownMenu(
offset = DpOffset.Zero,
modifier = modifier,
) {
TangemContextMenuCheckboxItem(
title = TextReference.Res(R.string.organize_tokens_sort_by_balance),
isChecked = organizeMenuUM.isSortedByBalance,
onClick = organizeMenuUM.onSortClick,
)
HorizontalDivider(
thickness = 0.5.dp,
color = TangemTheme.colors2.border.neutral.quaternary,
)
TangemContextMenuCheckboxItem(
title = TextReference.Res(R.string.organize_tokens_group),
isChecked = organizeMenuUM.isGrouped,
onClick = organizeMenuUM.onGroupClick,
Menu(
organizeMenuUM = organizeMenuUM,
onDropdownDismiss = onDropdownDismiss,
)
}
}
@Composable
private fun Menu(
onDropdownDismiss: () -> Unit,
organizeMenuUM: OrganizeTokensUM.OrganizeMenuUM,
modifier: Modifier = Modifier,
) {
Column(modifier) {
SortByBalanceMenuSection(
organizeMenuUM = organizeMenuUM,
onDropdownDismiss = onDropdownDismiss,
)
GroupTokensMenuSection(
organizeMenuUM = organizeMenuUM,
onDropdownDismiss = onDropdownDismiss,
)
}
}
@Composable
private fun SortByBalanceMenuSection(organizeMenuUM: OrganizeTokensUM.OrganizeMenuUM, onDropdownDismiss: () -> Unit) {
Text(
text = stringResourceSafe(R.string.organize_tokens_sort_by_balance),
style = TangemTheme.typography2.headingSemibold17,
color = if (organizeMenuUM.isSortedByBalance) {
TangemTheme.colors2.text.status.disabled
} else {
TangemTheme.colors2.text.neutral.primary
},
maxLines = 1,
modifier = Modifier
.fillMaxWidth()
.widthIn(238.dp)
.clickableSingle(
onClick = {
organizeMenuUM.onSortClick()
onDropdownDismiss()
},
enabled = !organizeMenuUM.isSortedByBalance,
)
.padding(vertical = TangemTheme.dimens2.x5, horizontal = TangemTheme.dimens2.x4),
)
HorizontalDivider(
thickness = 0.5.dp,
color = TangemTheme.colors2.border.neutral.quaternary,
)
}
@Composable
private fun GroupTokensMenuSection(organizeMenuUM: OrganizeTokensUM.OrganizeMenuUM, onDropdownDismiss: () -> Unit) {
Row(
horizontalArrangement = Arrangement.SpaceBetween,
modifier = Modifier
.fillMaxWidth()
.widthIn(238.dp)
.clickableSingle(
onClick = {
organizeMenuUM.onGroupClick()
onDropdownDismiss()
},
)
.padding(vertical = TangemTheme.dimens2.x5, horizontal = TangemTheme.dimens2.x4),
) {
Text(
text = stringResourceSafe(R.string.organize_tokens_group),
style = TangemTheme.typography2.headingSemibold17,
color = TangemTheme.colors2.text.neutral.primary,
maxLines = 1,
)
if (organizeMenuUM.isGrouped) {
Box(
modifier = Modifier
.padding(TangemTheme.dimens2.x0_5)
.size(TangemTheme.dimens2.x5)
.background(
color = TangemTheme.colors2.graphic.neutral.primary,
shape = CircleShape,
),
) {
Icon(
painter = rememberVectorPainter(
ImageVector.vectorResource(R.drawable.ic_check_default_24),
),
contentDescription = null,
tint = TangemTheme.colors2.graphic.neutral.primaryInverted,
modifier = Modifier
.align(Alignment.Center)
.padding(TangemTheme.dimens2.x0_5)
.size(TangemTheme.dimens2.x4),
)
}
}
}
}

View file

@ -27,6 +27,7 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.tooling.preview.PreviewParameter
import androidx.compose.ui.tooling.preview.PreviewParameterProvider
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import com.tangem.core.ui.components.SpacerH
import com.tangem.core.ui.components.bottomsheets.TangemBottomSheet
import com.tangem.core.ui.components.bottomsheets.TangemBottomSheetConfig
@ -101,7 +102,9 @@ internal fun OrganizeTokensContent(
organizeMenuUM = organizeTokensUM.organizeMenuUM,
showDropdownMenu = isShowDropdownMenu,
onDropdownDismiss = { isShowDropdownMenu = false },
modifier = Modifier.hazeEffectTangem(hazeState),
modifier = Modifier.hazeEffectTangem(hazeState) {
blurRadius = 6.dp
},
)
},
)