Updated on 2026-08-14
This commit is contained in:
parent
cc7f567fee
commit
de449519a3
1 changed files with 44 additions and 27 deletions
|
|
@ -19,9 +19,15 @@ import androidx.compose.material.FabPosition
|
|||
import androidx.compose.material.Scaffold
|
||||
import androidx.compose.material.Text
|
||||
import androidx.compose.runtime.Composable
|
||||
import androidx.compose.runtime.getValue
|
||||
import androidx.compose.runtime.mutableStateOf
|
||||
import androidx.compose.runtime.remember
|
||||
import androidx.compose.runtime.setValue
|
||||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.ExperimentalComposeUiApi
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.layout.onSizeChanged
|
||||
import androidx.compose.ui.platform.LocalDensity
|
||||
import androidx.compose.ui.platform.LocalSoftwareKeyboardController
|
||||
import androidx.compose.ui.res.stringResource
|
||||
import androidx.compose.ui.text.AnnotatedString
|
||||
|
|
@ -29,9 +35,10 @@ import androidx.compose.ui.text.SpanStyle
|
|||
import androidx.compose.ui.text.font.FontWeight
|
||||
import androidx.compose.ui.text.style.TextAlign
|
||||
import androidx.compose.ui.tooling.preview.Preview
|
||||
import androidx.compose.ui.unit.ExperimentalUnitApi
|
||||
import androidx.compose.ui.unit.Dp
|
||||
import androidx.compose.ui.unit.TextUnit
|
||||
import androidx.compose.ui.unit.TextUnitType
|
||||
import androidx.compose.ui.unit.dp
|
||||
import androidx.paging.PagingData
|
||||
import androidx.paging.compose.LazyPagingItems
|
||||
import androidx.paging.compose.collectAsLazyPagingItems
|
||||
|
|
@ -44,27 +51,46 @@ import com.tangem.tap.features.tokens.impl.presentation.states.TokensListStateHo
|
|||
import com.tangem.tap.features.tokens.impl.presentation.states.TokensListToolbarState
|
||||
import com.tangem.wallet.R
|
||||
import kotlinx.coroutines.flow.emptyFlow
|
||||
import kotlinx.coroutines.flow.flow
|
||||
import kotlinx.coroutines.flow.flowOf
|
||||
|
||||
/**
|
||||
* Tokens list screen
|
||||
*
|
||||
* @param stateHolder state holder
|
||||
*
|
||||
[REDACTED_AUTHOR]
|
||||
*/
|
||||
@Composable
|
||||
internal fun TokensListScreen(stateHolder: TokensListStateHolder) {
|
||||
BackHandler(onBack = stateHolder.toolbarState.onBackButtonClick)
|
||||
|
||||
var floatingButtonHeight by remember { mutableStateOf(value = 0.dp) }
|
||||
|
||||
Scaffold(
|
||||
topBar = { TokensListToolbar(state = stateHolder.toolbarState) },
|
||||
floatingActionButton = {
|
||||
if (stateHolder is TokensListStateHolder.ManageContent) {
|
||||
SaveChangesButton(onClick = stateHolder.onSaveButtonClick)
|
||||
val density = LocalDensity.current
|
||||
val verticalPadding = TangemTheme.dimens.spacing32
|
||||
|
||||
SaveChangesButton(
|
||||
onClick = stateHolder.onSaveButtonClick,
|
||||
modifier = Modifier.onSizeChanged {
|
||||
with(density) { floatingButtonHeight = it.height.toDp() + verticalPadding }
|
||||
},
|
||||
)
|
||||
}
|
||||
},
|
||||
floatingActionButtonPosition = FabPosition.Center,
|
||||
) { scaffoldPadding ->
|
||||
val tokens = stateHolder.tokens.collectAsLazyPagingItems()
|
||||
|
||||
TokensListContent(stateHolder.isDifferentAddressesBlockVisible, tokens, scaffoldPadding)
|
||||
TokensListContent(
|
||||
isDifferentAddressesBlockVisible = stateHolder.isDifferentAddressesBlockVisible,
|
||||
tokens = tokens,
|
||||
scaffoldPadding = scaffoldPadding,
|
||||
bottomMarginDp = floatingButtonHeight,
|
||||
)
|
||||
|
||||
stateHolder.onTokensLoadStateChanged(tokens.loadState.refresh)
|
||||
|
||||
|
|
@ -96,6 +122,7 @@ private fun TokensListContent(
|
|||
isDifferentAddressesBlockVisible: Boolean,
|
||||
tokens: LazyPagingItems<TokenItemState>,
|
||||
scaffoldPadding: PaddingValues,
|
||||
bottomMarginDp: Dp,
|
||||
) {
|
||||
val state = rememberLazyListState()
|
||||
|
||||
|
|
@ -108,6 +135,7 @@ private fun TokensListContent(
|
|||
.fillMaxSize()
|
||||
.padding(scaffoldPadding),
|
||||
state = state,
|
||||
contentPadding = PaddingValues(bottom = bottomMarginDp),
|
||||
) {
|
||||
if (isDifferentAddressesBlockVisible) {
|
||||
item { DifferentAddressesWarning() }
|
||||
|
|
@ -119,7 +147,6 @@ private fun TokensListContent(
|
|||
}
|
||||
}
|
||||
|
||||
@OptIn(ExperimentalUnitApi::class)
|
||||
@Composable
|
||||
private fun DifferentAddressesWarning() {
|
||||
Box(
|
||||
|
|
@ -159,9 +186,9 @@ private fun DifferentAddressesWarning() {
|
|||
}
|
||||
|
||||
@Composable
|
||||
private fun SaveChangesButton(onClick: () -> Unit) {
|
||||
private fun SaveChangesButton(onClick: () -> Unit, modifier: Modifier = Modifier) {
|
||||
PrimaryButton(
|
||||
modifier = Modifier
|
||||
modifier = modifier
|
||||
.imePadding()
|
||||
.padding(horizontal = TangemTheme.dimens.spacing16)
|
||||
.fillMaxWidth(),
|
||||
|
|
@ -205,16 +232,11 @@ private fun Preview_TokensListScreen_Manage() {
|
|||
),
|
||||
isLoading = false,
|
||||
isDifferentAddressesBlockVisible = true,
|
||||
tokens = flow {
|
||||
emit(
|
||||
PagingData.from(
|
||||
listOf(
|
||||
TokenListPreviewData.createManageToken(),
|
||||
TokenListPreviewData.createManageToken(),
|
||||
),
|
||||
),
|
||||
)
|
||||
},
|
||||
tokens = flowOf(
|
||||
PagingData.from(
|
||||
listOf(TokenListPreviewData.createManageToken()),
|
||||
),
|
||||
),
|
||||
onSaveButtonClick = {},
|
||||
onTokensLoadStateChanged = {},
|
||||
),
|
||||
|
|
@ -235,16 +257,11 @@ private fun Preview_TokensListScreen_Read() {
|
|||
),
|
||||
isLoading = false,
|
||||
isDifferentAddressesBlockVisible = false,
|
||||
tokens = flow {
|
||||
emit(
|
||||
PagingData.from(
|
||||
listOf(
|
||||
TokenListPreviewData.createManageToken(),
|
||||
TokenListPreviewData.createManageToken(),
|
||||
),
|
||||
),
|
||||
)
|
||||
},
|
||||
tokens = flowOf(
|
||||
PagingData.from(
|
||||
listOf(TokenListPreviewData.createManageToken()),
|
||||
),
|
||||
),
|
||||
onTokensLoadStateChanged = {},
|
||||
),
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue