summaryrefslogtreecommitdiff
path: root/Hutch/Views/Builds/BuildListView.swift
diff options
context:
space:
mode:
authorChristian Cleberg <[email protected]>2026-04-23 17:39:13 -0500
committerChristian Cleberg <[email protected]>2026-04-23 17:39:13 -0500
commit66601a8091a73f3e31f4fb534c38b3eca4756e93 (patch)
treef85cd883e63177d25dfe5993a4d545efa4812923 /Hutch/Views/Builds/BuildListView.swift
parent380fb866d090c5f13b2ad3f88f1fe23c4ade4801 (diff)
downloadhutch-3.2.1.tar.gz
hutch-3.2.1.tar.bz2
hutch-3.2.1.zip
fix: profile loading error and user-timeline prefs updatev3.2.1
Diffstat (limited to 'Hutch/Views/Builds/BuildListView.swift')
-rw-r--r--Hutch/Views/Builds/BuildListView.swift26
1 files changed, 26 insertions, 0 deletions
diff --git a/Hutch/Views/Builds/BuildListView.swift b/Hutch/Views/Builds/BuildListView.swift
index 8de2220..20414d6 100644
--- a/Hutch/Views/Builds/BuildListView.swift
+++ b/Hutch/Views/Builds/BuildListView.swift
@@ -4,6 +4,8 @@ struct BuildListView: View {
@AppStorage(AppStorageKeys.swipeActionsEnabled, store: .standard) private var swipeActionsEnabled = true
@AppStorage(AppStorageKeys.buildsAutoRefreshInterval) private var autoRefreshRawValue = 0
@AppStorage(AppStorageKeys.buildsRepoFilter) private var savedRepoFilter = ""
+ @AppStorage(AppStorageKeys.buildsLookbackDays, store: .standard)
+ private var lookbackDays = BuildListViewModel.defaultLookbackDays
@Environment(AppState.self) private var appState
@Environment(\.isAMOLEDTheme) private var isAMOLED
@State private var viewModel: BuildListViewModel?
@@ -65,6 +67,20 @@ struct BuildListView: View {
}
}
}
+ Section("Timeframe") {
+ ForEach(HomeViewModel.allowedFailedBuildLookbackDays, id: \.self) { days in
+ Button {
+ lookbackDays = days
+ viewModel.lookbackDays = days
+ } label: {
+ if lookbackDays == days {
+ Label(HomeViewModel.failedBuildLookbackLabel(days: days), systemImage: "checkmark")
+ } else {
+ Text(HomeViewModel.failedBuildLookbackLabel(days: days))
+ }
+ }
+ }
+ }
} label: {
Image(systemName: "line.3.horizontal.decrease.circle")
}
@@ -107,6 +123,7 @@ struct BuildListView: View {
if viewModel == nil {
let vm = BuildListViewModel(client: appState.client, defaults: appState.accountDefaults)
vm.repoFilter = savedRepoFilter
+ vm.lookbackDays = lookbackDays
viewModel = vm
await vm.loadJobs()
}
@@ -114,6 +131,9 @@ struct BuildListView: View {
// onDisappear stops it when navigating away.
viewModel?.startAutoRefresh(interval: autoRefreshInterval)
}
+ .onChange(of: lookbackDays) { _, newValue in
+ viewModel?.lookbackDays = newValue
+ }
.onDisappear {
viewModel?.stopAutoRefresh()
}
@@ -236,6 +256,12 @@ struct BuildListView: View {
systemImage: "magnifyingglass",
description: Text("No builds matched “\(viewModel.searchText)”.")
)
+ } else if !viewModel.jobs.isEmpty, viewModel.filteredJobs.isEmpty {
+ ContentUnavailableView(
+ "No Builds In Timeframe",
+ systemImage: "calendar.badge.clock",
+ description: Text("No builds were updated \(HomeViewModel.failedBuildLookbackLabel(days: lookbackDays)).")
+ )
} else if viewModel.jobs.isEmpty, viewModel.error == nil {
ContentUnavailableView(
"No Builds",