package com.craigvg.lichun_android.utils import androidx.compose.animation.AnimatedVisibility import androidx.compose.animation.fadeIn import androidx.compose.animation.fadeOut import androidx.compose.foundation.background import androidx.compose.foundation.clickable import androidx.compose.foundation.interaction.MutableInteractionSource import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.runtime.Composable import androidx.compose.runtime.remember import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import com.craigvg.lichun_android.ui.components.indicators.LoadingView /** * Composable wrappers for loading and error overlay states * Ported from iOS View+LoadingError.swift */ /** * Wraps content with a loading overlay when [isLoading] is true. */ @Composable fun LoadingOverlay( isLoading: Boolean, message: String = "Loading...", content: @Composable () -> Unit ) { Box(modifier = Modifier.fillMaxSize()) { content() AnimatedVisibility( visible = isLoading, enter = fadeIn(), exit = fadeOut() ) { Box( modifier = Modifier .fillMaxSize() .background(Color.Black.copy(alpha = 0.3f)) .clickable( interactionSource = remember { MutableInteractionSource() }, indication = null, onClick = {} // Block touches ), contentAlignment = Alignment.Center ) { LoadingView(message = message) } } } } /** * Wraps content with an error overlay when [error] is not null. */ @Composable fun ErrorOverlay( error: String?, onDismiss: () -> Unit = {}, onRetry: (() -> Unit)? = null, content: @Composable () -> Unit ) { Box(modifier = Modifier.fillMaxSize()) { content() AnimatedVisibility( visible = error != null, enter = fadeIn(), exit = fadeOut() ) { Box( modifier = Modifier .fillMaxSize() .background(Color.Black.copy(alpha = 0.5f)) .clickable( interactionSource = remember { MutableInteractionSource() }, indication = null, onClick = onDismiss ), contentAlignment = Alignment.Center ) { error?.let { com.craigvg.lichun_android.ui.components.overlays.ErrorRecoveryView( message = it, onRetry = onRetry ?: onDismiss ) } } } } }