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