Updated on 2026-08-14

This commit is contained in:
Tangem 2024-12-05 12:30:20 +04:00
parent ba09a8d44a
commit 56fc7ee726

View file

@ -6,8 +6,12 @@ import androidx.compose.animation.core.snap
import androidx.compose.animation.core.tween import androidx.compose.animation.core.tween
import androidx.compose.foundation.layout.* import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.LazyListState
import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.material3.Text import androidx.compose.material3.Text
import androidx.compose.runtime.Composable import androidx.compose.runtime.Composable
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier import androidx.compose.ui.Modifier
@ -38,10 +42,6 @@ import com.tangem.core.ui.res.TangemTheme
import com.tangem.core.ui.res.TangemThemePreview import com.tangem.core.ui.res.TangemThemePreview
import com.tangem.domain.markets.PriceChangeInterval import com.tangem.domain.markets.PriceChangeInterval
import com.tangem.features.markets.details.impl.ui.components.* import com.tangem.features.markets.details.impl.ui.components.*
import com.tangem.features.markets.details.impl.ui.components.ExchangesBottomSheet
import com.tangem.features.markets.details.impl.ui.components.InfoBottomSheet
import com.tangem.features.markets.details.impl.ui.components.MarketTokenDetailsChart
import com.tangem.features.markets.details.impl.ui.components.tokenMarketDetailsBody
import com.tangem.features.markets.details.impl.ui.state.ExchangesBottomSheetContent import com.tangem.features.markets.details.impl.ui.state.ExchangesBottomSheetContent
import com.tangem.features.markets.details.impl.ui.state.InfoBottomSheetContent import com.tangem.features.markets.details.impl.ui.state.InfoBottomSheetContent
import com.tangem.features.markets.details.impl.ui.state.MarketsTokenDetailsUM import com.tangem.features.markets.details.impl.ui.state.MarketsTokenDetailsUM
@ -93,6 +93,7 @@ private fun Content(
) { ) {
val density = LocalDensity.current val density = LocalDensity.current
val bottomBarHeight = with(density) { WindowInsets.systemBars.getBottom(this).toDp() } val bottomBarHeight = with(density) { WindowInsets.systemBars.getBottom(this).toDp() }
val lazyListState = rememberLazyListState()
Column( Column(
modifier = modifier modifier = modifier
@ -100,25 +101,25 @@ private fun Content(
.let { if (addTopBarStatusBarInsets) it.statusBarsPadding() else it } .let { if (addTopBarStatusBarInsets) it.statusBarsPadding() else it }
.fillMaxSize(), .fillMaxSize(),
) { ) {
TangemTopAppBar( TopBar(
modifier = Modifier modifier = Modifier.onGloballyPositioned {
.onGloballyPositioned { if (it.size.height > 0) {
if (it.size.height > 0) { with(density) {
with(density) { onHeaderSizeChange(it.size.height.toDp())
onHeaderSizeChange(it.size.height.toDp())
}
} }
}, }
title = state.tokenName, },
startButton = TopAppBarButtonUM.Back( lazyListState = lazyListState,
onBackClicked = onBackClick, tokenName = state.tokenName,
enabled = backButtonEnabled, tokenPrice = state.priceText,
), isBackButtonEnabled = backButtonEnabled,
onBackClick = onBackClick,
) )
SpacerH4() SpacerH4()
LazyColumn( LazyColumn(
state = lazyListState,
contentPadding = PaddingValues(bottom = bottomBarHeight), contentPadding = PaddingValues(bottom = bottomBarHeight),
) { ) {
item("header") { item("header") {
@ -158,6 +159,32 @@ private fun Content(
} }
} }
@Composable
private fun TopBar(
lazyListState: LazyListState,
tokenName: String,
tokenPrice: String,
isBackButtonEnabled: Boolean,
onBackClick: () -> Unit,
modifier: Modifier = Modifier,
) {
val showPriceSubtitle by remember {
derivedStateOf {
lazyListState.firstVisibleItemIndex > 1
}
}
TangemTopAppBar(
modifier = modifier,
title = tokenName,
subtitle = if (showPriceSubtitle) tokenPrice else null,
startButton = TopAppBarButtonUM.Back(
onBackClicked = onBackClick,
enabled = isBackButtonEnabled,
),
)
}
@Composable @Composable
private fun Header(state: MarketsTokenDetailsUM, modifier: Modifier = Modifier) { private fun Header(state: MarketsTokenDetailsUM, modifier: Modifier = Modifier) {
Row( Row(