refresh home

This commit is contained in:
cheykrym 2025-08-13 03:11:49 +03:00
parent c8d71996d9
commit d64457ad35
2 changed files with 12 additions and 5 deletions

View File

@ -4,23 +4,28 @@ import Combine
class NewHomeTabViewModel: ObservableObject { class NewHomeTabViewModel: ObservableObject {
@Published var posts: [Post] = [] @Published var posts: [Post] = []
@Published var isLoading = true @Published var isLoading = true
@Published var isRefreshing = false
private var hasLoadedData = false private var hasLoadedData = false
func fetchDataIfNeeded() { func fetchDataIfNeeded() {
// Загружаем данные только если они еще не были загружены
guard !hasLoadedData else { return } guard !hasLoadedData else { return }
refreshData()
}
func refreshData() {
DispatchQueue.main.async {
self.isRefreshing = true
}
isLoading = true
PostService.shared.fetchAllPosts { [weak self] fetchedPosts in PostService.shared.fetchAllPosts { [weak self] fetchedPosts in
// Используем weak self чтобы избежать циклов сильных ссылок
guard let self = self else { return } guard let self = self else { return }
// Обновляем UI в основном потоке
DispatchQueue.main.async { DispatchQueue.main.async {
self.posts = fetchedPosts self.posts = fetchedPosts
self.isLoading = false self.isLoading = false
self.hasLoadedData = true self.hasLoadedData = true
self.isRefreshing = false
} }
} }
} }

View File

@ -16,7 +16,9 @@ struct NewHomeTab: View {
if viewModel.isLoading { if viewModel.isLoading {
ProgressView("Загрузка ленты...") ProgressView("Загрузка ленты...")
} else { } else {
ScrollView { RefreshableScrollView(isRefreshing: $viewModel.isRefreshing, onRefresh: {
viewModel.refreshData()
}) {
HStack(alignment: .top, spacing: 6) { HStack(alignment: .top, spacing: 6) {
LazyVStack(spacing: 6) { LazyVStack(spacing: 6) {
ForEach(column1Posts) { post in ForEach(column1Posts) { post in