ux: pull-to-refresh на всех списках (Этап 2 п.12)

Раньше свайп-обновление было только в Файлах. Добавлено (Material3
PullToRefreshBox): Почта (входящие/исходящие, force-обновление), Конференции
(список бесед — заменяет убранную кнопку ↻), Контакты (force + CTag — дёшево),
Задачи (список), Карточки (доски и открытая доска). Контакты: refresh()
получил параметр force (pull-to-refresh форсит sync мимо TTL; с CTag-проверкой
это 1 лёгкий PROPFIND).
This commit is contained in:
b-dev-mobile
2026-07-09 12:48:08 +00:00
parent 286ab9c8bf
commit d1d61d0cf8
6 changed files with 88 additions and 32 deletions
@@ -29,6 +29,8 @@ import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.OutlinedTextField
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.pulltorefresh.PullToRefreshBox
import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
@@ -318,11 +320,14 @@ fun TalkScreen(
onCreateRoom = vm::openCreateRoom,
onToggleFavorite = { vm.toggleFavorite(session, it.token) },
onMarkUnread = { vm.markRoomUnread(session, it.token) },
refreshing = state.loading && state.rooms.isNotEmpty(),
onRefresh = { vm.load(session) },
)
}
}
}
@OptIn(ExperimentalMaterial3Api::class)
@Composable
private fun RoomListContent(
session: AuthSession,
@@ -337,6 +342,8 @@ private fun RoomListContent(
onCreateRoom: () -> Unit,
onToggleFavorite: (TalkRoom) -> Unit,
onMarkUnread: (TalkRoom) -> Unit,
refreshing: Boolean = false,
onRefresh: () -> Unit = {},
) {
Column(
modifier = Modifier.fillMaxSize(),
@@ -351,6 +358,13 @@ private fun RoomListContent(
onCreateClick = onCreateRoom,
)
TalkFilterChips(selected = roomFilter, onClear = onClearFilter)
PullToRefreshBox(
isRefreshing = refreshing,
onRefresh = onRefresh,
modifier = Modifier
.weight(1f)
.fillMaxWidth(),
) {
if (rooms.isEmpty()) {
Column(
modifier = Modifier
@@ -391,6 +405,7 @@ private fun RoomListContent(
}
}
}
}
}
}