ux: единый экран ошибки F7ErrorState + retry (Этап 2 п.12)

Новый F7ErrorState: центрированная иконка + сообщение + «Повторить»
вместо россыпи красного текста. F7ModuleScreen при ошибке без данных
показывает его (+ новый onErrorRetry — retry без хедер-кнопки ↻).
Подключено: Контакты/Конференции/Карточки/Поддержка (через F7ModuleScreen),
Файлы (onErrorRetry=refreshCurrent), Почта (пустой список + ошибка →
F7ErrorState, убран верхний баннер-текст). Retry везде дергает load/refresh.
This commit is contained in:
b-dev-mobile
2026-07-09 14:08:36 +00:00
parent 8f7eaff611
commit a674721353
5 changed files with 75 additions and 11 deletions
@@ -48,6 +48,7 @@ import androidx.lifecycle.viewmodel.compose.viewModel
import ru.forbion.f7cloud.core.auth.AuthSession
import androidx.activity.compose.BackHandler
import ru.forbion.f7cloud.core.designsystem.F7Colors
import ru.forbion.f7cloud.core.designsystem.F7ErrorState
import ru.forbion.f7cloud.core.designsystem.F7OverlayDismissHandler
import ru.forbion.f7cloud.core.designsystem.f7SwipeFromRightToDismiss
import androidx.activity.compose.rememberLauncherForActivityResult
@@ -599,9 +600,6 @@ private fun MailInboxScreen(
color = F7Colors.TextPrimary,
)
}
if (!error.isNullOrBlank()) {
Text(text = error, color = F7Colors.Error, style = MaterialTheme.typography.bodyMedium)
}
PullToRefreshBox(
isRefreshing = refreshing && !loading,
onRefresh = onRefresh,
@@ -643,7 +641,13 @@ private fun MailInboxScreen(
}
return@Box
}
if (messages.isEmpty()) {
if (messages.isEmpty() && !error.isNullOrBlank()) {
F7ErrorState(
message = error,
onRetry = onRefresh,
modifier = Modifier.fillMaxSize(),
)
} else if (messages.isEmpty()) {
Box(
modifier = Modifier.fillMaxSize(),
contentAlignment = Alignment.Center,