diff --git a/Shared/ViewModels/NewHomeTabViewModel.swift b/Shared/ViewModels/NewHomeTabViewModel.swift index 3a55530..5fe5284 100644 --- a/Shared/ViewModels/NewHomeTabViewModel.swift +++ b/Shared/ViewModels/NewHomeTabViewModel.swift @@ -4,23 +4,28 @@ import Combine class NewHomeTabViewModel: ObservableObject { @Published var posts: [Post] = [] @Published var isLoading = true + @Published var isRefreshing = false private var hasLoadedData = false func fetchDataIfNeeded() { - // Загружаем данные только если они еще не были загружены guard !hasLoadedData else { return } + refreshData() + } + + func refreshData() { + DispatchQueue.main.async { + self.isRefreshing = true + } - isLoading = true PostService.shared.fetchAllPosts { [weak self] fetchedPosts in - // Используем weak self чтобы избежать циклов сильных ссылок guard let self = self else { return } - // Обновляем UI в основном потоке DispatchQueue.main.async { self.posts = fetchedPosts self.isLoading = false self.hasLoadedData = true + self.isRefreshing = false } } } diff --git a/Shared/Views/Tab/NewHomeTab.swift b/Shared/Views/Tab/NewHomeTab.swift index 8ffdc0b..26526a8 100644 --- a/Shared/Views/Tab/NewHomeTab.swift +++ b/Shared/Views/Tab/NewHomeTab.swift @@ -16,7 +16,9 @@ struct NewHomeTab: View { if viewModel.isLoading { ProgressView("Загрузка ленты...") } else { - ScrollView { + RefreshableScrollView(isRefreshing: $viewModel.isRefreshing, onRefresh: { + viewModel.refreshData() + }) { HStack(alignment: .top, spacing: 6) { LazyVStack(spacing: 6) { ForEach(column1Posts) { post in