diff options
| author | Christian Cleberg <[email protected]> | 2026-03-23 15:17:48 -0500 |
|---|---|---|
| committer | Christian Cleberg <[email protected]> | 2026-03-23 15:17:48 -0500 |
| commit | cf87c44f674e020c32fea70903f02c317b57da3b (patch) | |
| tree | 88c09a27ef1ba30581a63c50f0f8d345477145c5 /Hutch/Views/Builds/BuildDetailView.swift | |
| parent | b81657586244299fc9fe78e4f27ca1c8bca07060 (diff) | |
| download | hutch-cf87c44f674e020c32fea70903f02c317b57da3b.tar.gz hutch-cf87c44f674e020c32fea70903f02c317b57da3b.tar.bz2 hutch-cf87c44f674e020c32fea70903f02c317b57da3b.zip | |
Add scoped auto-refresh to build detail
Diffstat (limited to 'Hutch/Views/Builds/BuildDetailView.swift')
| -rw-r--r-- | Hutch/Views/Builds/BuildDetailView.swift | 60 |
1 files changed, 46 insertions, 14 deletions
diff --git a/Hutch/Views/Builds/BuildDetailView.swift b/Hutch/Views/Builds/BuildDetailView.swift index cd2a972..104b961 100644 --- a/Hutch/Views/Builds/BuildDetailView.swift +++ b/Hutch/Views/Builds/BuildDetailView.swift @@ -6,10 +6,14 @@ struct BuildDetailView: View { @Environment(AppState.self) private var appState @State private var viewModel: BuildDetailViewModel? @State private var rebuiltJobId: Int? - @State private var selectedTask: BuildTask? + @State private var selectedTaskName: String? @State private var showEditResubmitSheet = false @State private var showCancelConfirmation = false + private var isPresentingLogSheet: Bool { + selectedTaskName != nil + } + var body: some View { Group { if let viewModel { @@ -42,18 +46,6 @@ struct BuildDetailView: View { BuildDetailView(jobId: rebuiltJobId) } } - .navigationDestination(isPresented: Binding( - get: { selectedTask != nil }, - set: { isPresented in - if !isPresented { - selectedTask = nil - } - } - )) { - if let selectedTask, let viewModel { - BuildTaskLogView(task: selectedTask, viewModel: viewModel) - } - } .sheet(isPresented: $showEditResubmitSheet) { if let viewModel, let job = viewModel.job { EditResubmitBuildSheet(viewModel: viewModel, job: job) { jobId in @@ -62,6 +54,38 @@ struct BuildDetailView: View { } } } + .sheet(isPresented: Binding( + get: { selectedTaskName != nil }, + set: { isPresented in + if !isPresented { + selectedTaskName = nil + } + } + )) { + if let selectedTaskName, let viewModel { + NavigationStack { + BuildTaskLogView(taskName: selectedTaskName, viewModel: viewModel) + .toolbar { + ToolbarItem(placement: .cancellationAction) { + Button("Done") { + self.selectedTaskName = nil + } + } + } + } + } else { + NavigationStack { + SRHTLoadingStateView(message: "Loading…") + .toolbar { + ToolbarItem(placement: .cancellationAction) { + Button("Done") { + self.selectedTaskName = nil + } + } + } + } + } + } .alert("Cancel Build?", isPresented: $showCancelConfirmation) { Button("Keep Running", role: .cancel) {} Button("Cancel Build", role: .destructive) { @@ -75,8 +99,16 @@ struct BuildDetailView: View { let vm = BuildDetailViewModel(jobId: jobId, client: appState.client) viewModel = vm await vm.loadJob() + vm.startAutoRefresh() } } + .onAppear { + viewModel?.startAutoRefresh() + } + .onDisappear { + guard !isPresentingLogSheet else { return } + viewModel?.stopAutoRefresh() + } } @ViewBuilder @@ -129,7 +161,7 @@ struct BuildDetailView: View { ForEach(job.tasks) { task in Section { Button { - selectedTask = task + selectedTaskName = task.name } label: { HStack { Text(task.status.rawValue.capitalized) |
