Load filtered home activity streams
This commit is contained in:
@@ -321,21 +321,21 @@ final class HomeViewController: RefreshingTableViewController {
|
||||
case all
|
||||
case issues
|
||||
case pulls
|
||||
|
||||
var coreValue: HomeActivityFilter {
|
||||
switch self {
|
||||
case .all: return .all
|
||||
case .issues: return .issues
|
||||
case .pulls: return .pullRequests
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private let context: AppContext
|
||||
private var page: HomePage?
|
||||
private var filter = ActivityFilter.all
|
||||
private var currentPage: UInt32 = 0
|
||||
|
||||
private var activities: [ActivityRow] {
|
||||
guard let page else { return [] }
|
||||
switch filter {
|
||||
case .all: return page.activities
|
||||
case .issues: return page.issueActivities
|
||||
case .pulls: return page.pullActivities
|
||||
}
|
||||
}
|
||||
private var nextPage: UInt32?
|
||||
private var activities: [ActivityRow] { page?.activities ?? [] }
|
||||
|
||||
init(context: AppContext) {
|
||||
self.context = context
|
||||
@@ -381,7 +381,8 @@ final class HomeViewController: RefreshingTableViewController {
|
||||
}
|
||||
|
||||
override func loadMoreContent() {
|
||||
loadPage(currentPage + 1, refreshing: false)
|
||||
guard let nextPage else { return }
|
||||
loadPage(nextPage, refreshing: false)
|
||||
}
|
||||
|
||||
private func loadPage(_ requestedPage: UInt32, refreshing: Bool) {
|
||||
@@ -392,23 +393,25 @@ final class HomeViewController: RefreshingTableViewController {
|
||||
loadingTask?.cancel()
|
||||
loadingTask = Task {
|
||||
do {
|
||||
let result = try await context.core.home(page: requestedPage)
|
||||
let result = try await context.core.home(
|
||||
page: requestedPage,
|
||||
filter: filter.coreValue
|
||||
)
|
||||
if requestedPage == 1 {
|
||||
page = result
|
||||
} else {
|
||||
page?.activities.append(contentsOf: result.activities)
|
||||
page?.issueActivities.append(contentsOf: result.issueActivities)
|
||||
page?.pullActivities.append(contentsOf: result.pullActivities)
|
||||
page?.hasMore = result.hasMore
|
||||
page?.nextPage = result.nextPage
|
||||
}
|
||||
currentPage = requestedPage
|
||||
finishPagination(hasMore: result.hasMore)
|
||||
nextPage = result.nextPage
|
||||
finishPagination(hasMore: result.nextPage != nil)
|
||||
title = page?.serverName
|
||||
if requestedPage == 1 { tableView.tableHeaderView = page.map { page in
|
||||
HeatmapView(page: page, selectedFilter: filter.rawValue) { [weak self] index in
|
||||
guard let self, let filter = ActivityFilter(rawValue: index) else { return }
|
||||
guard filter != self.filter else { return }
|
||||
self.filter = filter
|
||||
self.updateActivities()
|
||||
self.loadPage(1, refreshing: false)
|
||||
}
|
||||
} }
|
||||
updateActivities()
|
||||
|
||||
Reference in New Issue
Block a user