refresh home
This commit is contained in:
parent
c8d71996d9
commit
d64457ad35
@ -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
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user