From 3006d0e7cb78db278b73daf2a14e6336ae53209a Mon Sep 17 00:00:00 2001 From: Tangem Date: Fri, 23 Aug 2024 12:32:52 +0500 Subject: [PATCH] Updated on 2026-08-14 --- .../NavigationButtonsBlock.kt | 53 ++++++++++--------- 1 file changed, 29 insertions(+), 24 deletions(-) diff --git a/common/ui/src/main/java/com/tangem/common/ui/navigationButtons/NavigationButtonsBlock.kt b/common/ui/src/main/java/com/tangem/common/ui/navigationButtons/NavigationButtonsBlock.kt index 8a9ccffd1e..92a791ad8a 100644 --- a/common/ui/src/main/java/com/tangem/common/ui/navigationButtons/NavigationButtonsBlock.kt +++ b/common/ui/src/main/java/com/tangem/common/ui/navigationButtons/NavigationButtonsBlock.kt @@ -7,8 +7,7 @@ import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.* import androidx.compose.foundation.shape.RoundedCornerShape import androidx.compose.material3.Icon -import androidx.compose.runtime.Composable -import androidx.compose.runtime.remember +import androidx.compose.runtime.* import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.draw.clip @@ -51,18 +50,10 @@ fun NavigationButtonsBlock(buttonState: NavigationButtonsState, modifier: Modifi @Composable private fun PrimaryButton(primaryButton: NavigationButton?, modifier: Modifier = Modifier) { + val wrappedButton by rememberNavigationButton(primaryButton) AnimatedContent( - targetState = primaryButton, - transitionSpec = { - val isPrimaryToHide = targetState != null && initialState == null - val isPrimaryWasVisible = targetState == null && initialState != null - if (isPrimaryToHide || isPrimaryWasVisible) { - slideInVertically(initialOffsetY = { it / 2 }).plus(fadeIn()) - .togetherWith(slideOutVertically(targetOffsetY = { it / 2 }).plus(fadeOut())) - } else { - fadeIn().togetherWith(fadeOut()) - } - }, + targetState = wrappedButton, + transitionSpec = { navigationButtonsTransition() }, contentAlignment = Alignment.Center, label = "Animate show primary button", modifier = modifier.fillMaxWidth(), @@ -90,18 +81,10 @@ private fun PrimaryButton(primaryButton: NavigationButton?, modifier: Modifier = @Composable private fun SecondaryButton(secondaryButton: NavigationButton?) { + val wrappedButton by rememberNavigationButton(secondaryButton) AnimatedContent( - targetState = secondaryButton, - transitionSpec = { - val isPrimaryToHide = targetState != null && initialState == null - val isPrimaryWasVisible = targetState == null && initialState != null - if (isPrimaryToHide || isPrimaryWasVisible) { - slideInVertically(initialOffsetY = { it / 2 }).plus(fadeIn()) - .togetherWith(slideOutVertically(targetOffsetY = { it / 2 }).plus(fadeOut())) - } else { - fadeIn().togetherWith(fadeOut()) - } - }, + targetState = wrappedButton, + transitionSpec = { navigationButtonsTransition() }, contentAlignment = Alignment.Center, label = "Animate show secondary button", modifier = Modifier.fillMaxWidth(), @@ -182,6 +165,28 @@ private fun ExtraButtons(extraButtons: ImmutableList?, txUrl: } } +@Composable +private fun rememberNavigationButton(button: NavigationButton?): MutableState { + return remember( + button?.iconRes, + button?.isIconVisible, + button?.isEnabled, + button?.showProgress, + button?.textReference, + ) { mutableStateOf(button) } +} + +private fun AnimatedContentTransitionScope.navigationButtonsTransition(): ContentTransform { + val isPrimaryToHide = targetState != null && initialState == null + val isPrimaryWasVisible = targetState == null && initialState != null + return if (isPrimaryToHide || isPrimaryWasVisible) { + slideInVertically(initialOffsetY = { it / 2 }).plus(fadeIn()) + .togetherWith(slideOutVertically(targetOffsetY = { it / 2 }).plus(fadeOut())) + } else { + fadeIn().togetherWith(fadeOut()) + } +} + // region Preview @Preview(showBackground = true, widthDp = 360) @Preview(showBackground = true, widthDp = 360, uiMode = Configuration.UI_MODE_NIGHT_YES)