33 lines
		
	
	
		
			833 B
		
	
	
	
		
			Swift
		
	
	
	
	
	
			
		
		
	
	
			33 lines
		
	
	
		
			833 B
		
	
	
	
		
			Swift
		
	
	
	
	
	
import Foundation
 | 
						|
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
 | 
						|
        }
 | 
						|
        
 | 
						|
        PostService.shared.fetchAllPosts { [weak self] fetchedPosts in
 | 
						|
            guard let self = self else { return }
 | 
						|
            
 | 
						|
            DispatchQueue.main.async {
 | 
						|
                self.posts = fetchedPosts
 | 
						|
                self.isLoading = false
 | 
						|
                self.hasLoadedData = true
 | 
						|
                self.isRefreshing = false
 | 
						|
            }
 | 
						|
        }
 | 
						|
    }
 | 
						|
}
 |