Pagination real impl on watchOS

This commit is contained in:
2025-10-29 22:21:11 +08:00
parent 82682cae9a
commit 9c3b228d02
4 changed files with 80 additions and 26 deletions

View File

@@ -14,12 +14,15 @@ import Combine
class ActivityViewModel: ObservableObject {
@Published var activities: [SnActivity] = []
@Published var isLoading = false
@Published var isLoadingMore = false
@Published var errorMessage: String?
@Published var hasMore = false
private let networkService = NetworkService()
let filter: String
private var isMock = false
private var hasFetched = false // Add this
private var hasFetched = false
private var nextCursor: String?
init(filter: String, mockActivities: [SnActivity]? = nil) {
self.filter = filter
@@ -30,21 +33,41 @@ class ActivityViewModel: ObservableObject {
}
func fetchActivities(token: String, serverUrl: String) async {
if isMock || hasFetched { return } // Check hasFetched
if isMock || hasFetched { return }
guard !isLoading else { return }
isLoading = true
errorMessage = nil
hasFetched = true // Set hasFetched
hasFetched = true
nextCursor = nil
do {
let fetchedActivities = try await networkService.fetchActivities(filter: filter, token: token, serverUrl: serverUrl)
self.activities = fetchedActivities
let response = try await networkService.fetchActivities(filter: filter, cursor: nil, token: token, serverUrl: serverUrl)
self.activities = response.activities
self.hasMore = response.hasMore
self.nextCursor = response.nextCursor
} catch {
self.errorMessage = error.localizedDescription
print("[watchOS] fetchActivities failed with error: \(error)")
hasFetched = false // Reset on error
hasFetched = false
}
isLoading = false
}
func loadMoreActivities(token: String, serverUrl: String) async {
guard !isLoadingMore && hasMore && nextCursor != nil else { return }
isLoadingMore = true
do {
let response = try await networkService.fetchActivities(filter: filter, cursor: nextCursor, token: token, serverUrl: serverUrl)
self.activities.append(contentsOf: response.activities)
self.hasMore = response.hasMore
self.nextCursor = response.nextCursor
} catch {
self.errorMessage = error.localizedDescription
print("[watchOS] loadMoreActivities failed with error: \(error)")
}
isLoadingMore = false
}
}