From 380ae9d056eb84ae5e2dd94d0f9b6f448cb0b3ea Mon Sep 17 00:00:00 2001 From: Barnabas Balogh Date: Tue, 27 Jan 2026 18:46:34 +0100 Subject: [PATCH] feature: add TimedVisibility composable for delayed content display --- .../common/ui/components/TimedVisibility.kt | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 app/src/main/java/hu/bbara/purefin/common/ui/components/TimedVisibility.kt diff --git a/app/src/main/java/hu/bbara/purefin/common/ui/components/TimedVisibility.kt b/app/src/main/java/hu/bbara/purefin/common/ui/components/TimedVisibility.kt new file mode 100644 index 0000000..51ac611 --- /dev/null +++ b/app/src/main/java/hu/bbara/purefin/common/ui/components/TimedVisibility.kt @@ -0,0 +1,39 @@ +package hu.bbara.purefin.common.ui.components + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.LaunchedEffect +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import kotlinx.coroutines.delay + +/** + * A composable that displays content for a specified duration after the value becomes null. + * + * @param value The value to display. When set to a non-null value, it will be shown immediately. + * When set to null, the previously shown value will remain visible for [hideAfterMillis] + * before being hidden. + * @param hideAfterMillis The duration in milliseconds to keep showing the last value after [value] becomes null. + * Defaults to 1000ms (1 second). + * @param content The composable content to display, receiving the current non-null value. + */ +@Composable +fun TimedVisibility( + value: Long?, + hideAfterMillis: Long = 1_000, + content: @Composable (Long) -> Unit, +) { + val shownValue = remember { mutableStateOf(null) } + + LaunchedEffect(value) { + if (value == null) { + delay(hideAfterMillis) + shownValue.value = null + } + shownValue.value = value + } + + shownValue.value?.let { + content(it) + } +} \ No newline at end of file