in ui-components/src/commonMain/kotlin/org/jetbrains/kotlinconf/ui/components/ErrorLoading.kt [106:150]
fun NormalErrorWithLoading(
message: String,
modifier: Modifier = Modifier,
isLoading: Boolean = false,
loadingText: String = stringResource(UiRes.string.loading),
retryText: String = stringResource(UiRes.string.action_error_reload),
onRetry: (() -> Unit)? = null,
) {
Column(
modifier = modifier.animateContentSize(),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center,
) {
Loading(enabled = isLoading)
Spacer(Modifier.height(16.dp))
AnimatedContent(
isLoading,
transitionSpec = {
val animIn = fadeIn(
animationSpec = tween(220, delayMillis = 100)
) + expandVertically(
expandFrom = Alignment.CenterVertically,
animationSpec = tween(100, easing = EaseInCubic)
)
val animOut = fadeOut(animationSpec = tween(90))
animIn togetherWith animOut
},
modifier = Modifier.fillMaxWidth(),
) { loadingState ->
if (loadingState) {
ErrorText(loadingText)
} else {
Column(horizontalAlignment = Alignment.CenterHorizontally) {
ErrorText(message)
if (onRetry != null) {
Spacer(Modifier.height(12.dp))
Button(retryText, onRetry)
}
}
}
}
}
}