ux: единый экран ошибки F7ErrorState + retry (Этап 2 п.12)
Новый F7ErrorState: центрированная иконка + сообщение + «Повторить» вместо россыпи красного текста. F7ModuleScreen при ошибке без данных показывает его (+ новый onErrorRetry — retry без хедер-кнопки ↻). Подключено: Контакты/Конференции/Карточки/Поддержка (через F7ModuleScreen), Файлы (onErrorRetry=refreshCurrent), Почта (пустой список + ошибка → F7ErrorState, убран верхний баннер-текст). Retry везде дергает load/refresh.
This commit is contained in:
@@ -79,6 +79,7 @@ fun ContactsScreen(
|
||||
modifier = modifier,
|
||||
loading = state.loading && state.contacts.isEmpty(),
|
||||
error = state.error,
|
||||
onErrorRetry = { vm.refresh(session, force = true) },
|
||||
) {
|
||||
// Поиск + кнопка создания контакта (создание раньше вызывалось из нижней
|
||||
// панели, теперь — из шапки, панель стала навигационной)
|
||||
|
||||
@@ -172,6 +172,7 @@ fun FilesScreen(
|
||||
modifier = Modifier.fillMaxSize(),
|
||||
loading = state.loading && displayItems.isEmpty(),
|
||||
error = state.error,
|
||||
onErrorRetry = { vm.refreshCurrent(session) },
|
||||
headerActions = {},
|
||||
) {
|
||||
Column(modifier = Modifier.fillMaxSize()) {
|
||||
|
||||
@@ -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,
|
||||
|
||||
@@ -306,6 +306,7 @@ fun TalkScreen(
|
||||
modifier = modifier,
|
||||
loading = state.loading && state.rooms.isEmpty(),
|
||||
error = state.error,
|
||||
onErrorRetry = { vm.load(session) },
|
||||
) {
|
||||
RoomListContent(
|
||||
session = session,
|
||||
|
||||
Reference in New Issue
Block a user