diff options
Diffstat (limited to 'Hutch/Views/Builds/BuildListView.swift')
| -rw-r--r-- | Hutch/Views/Builds/BuildListView.swift | 26 |
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", |
