From 7384da4d08dc20653d5cae300f4c23e42b07b927 Mon Sep 17 00:00:00 2001 From: Nico Verbruggen Date: Fri, 27 Feb 2026 14:11:35 +0100 Subject: [PATCH] =?UTF-8?q?=E2=99=BB=EF=B8=8F=20Cleaned=20up=20view=20a=20?= =?UTF-8?q?lot=20more,=20fix=20initial=20state?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SwiftUI/Startup/StartupAlertView.swift | 63 +++++++------------ .../Startup/StartupAlertViewModel.swift | 2 +- 2 files changed, 22 insertions(+), 43 deletions(-) diff --git a/phpmon/Domain/SwiftUI/Startup/StartupAlertView.swift b/phpmon/Domain/SwiftUI/Startup/StartupAlertView.swift index 4ec84f50..eee3b3e4 100644 --- a/phpmon/Domain/SwiftUI/Startup/StartupAlertView.swift +++ b/phpmon/Domain/SwiftUI/Startup/StartupAlertView.swift @@ -11,18 +11,6 @@ import SwiftUI struct StartupAlertView: View { @ObservedObject var viewModel: StartupAlertViewModel - /// Whether the bottom section (description text and/or past output) has content to display. - /// This is used to conditionally show the section and its divider, - /// avoiding empty padded sections and double dividers. - private var hasBottomContent: Bool { - let hasDescription = !viewModel.check.descriptionText.isEmpty && viewModel.state == .idle - - let hasOutput = !viewModel.outputLines.isEmpty - && (viewModel.state == .idle || viewModel.state == .completed) - - return hasDescription || hasOutput - } - var body: some View { VStack(spacing: 0) { StartupAlertHeaderView( @@ -30,48 +18,39 @@ struct StartupAlertView: View { subtitleText: viewModel.check.subtitleText ) - if viewModel.state == .running - || viewModel.state == .failed - || (viewModel.hasFix && viewModel.state == .idle) { + // Fix command description: only shown in idle state when a fix is available + if viewModel.state == .idle && viewModel.hasFix { Divider() - VStack(alignment: .leading, spacing: 12) { - if viewModel.state == .running || viewModel.state == .failed { - StartupOutputView( - lines: viewModel.outputLines, - isRunning: viewModel.state == .running - ) - } else { - StartupFixCommandView( - command: viewModel.check.fixDescription ?? "" - ) - } - } + StartupFixCommandView( + command: viewModel.check.fixDescription ?? "" + ) .padding(15) .frame(maxWidth: .infinity, alignment: .leading) } - if hasBottomContent { + // Terminal output: shown during and after fix execution + if !viewModel.outputLines.isEmpty + && (viewModel.state == .running || viewModel.state == .completed || viewModel.state == .failed) { Divider() - VStack(alignment: .leading, spacing: 12) { - if !viewModel.check.descriptionText.isEmpty, - viewModel.state == .idle { - MarkdownTextView(viewModel.check.descriptionText, fontSize: 12) - } - - if !viewModel.outputLines.isEmpty, - viewModel.state == .idle || viewModel.state == .completed { - StartupOutputView( - lines: viewModel.outputLines, - isRunning: false - ) - } - } + StartupOutputView( + lines: viewModel.outputLines, + isRunning: viewModel.state == .running + ) .padding(15) .frame(maxWidth: .infinity, alignment: .leading) } + // Description text: shown in idle state + if !viewModel.check.descriptionText.isEmpty && viewModel.state == .idle { + Divider() + + MarkdownTextView(viewModel.check.descriptionText, fontSize: 12) + .padding(15) + .frame(maxWidth: .infinity, alignment: .leading) + } + Divider() StartupAlertButtonRow( diff --git a/phpmon/Domain/SwiftUI/Startup/StartupAlertViewModel.swift b/phpmon/Domain/SwiftUI/Startup/StartupAlertViewModel.swift index 43d9daca..a7ddc8c3 100644 --- a/phpmon/Domain/SwiftUI/Startup/StartupAlertViewModel.swift +++ b/phpmon/Domain/SwiftUI/Startup/StartupAlertViewModel.swift @@ -27,7 +27,7 @@ class StartupAlertViewModel: ObservableObject { init(check: EnvironmentCheck) { self.check = check - self.state = check.fixCommand != nil ? .idle : .completed + self.state = .idle } init(check: EnvironmentCheck, state: State, outputLines: [OutputLine] = []) {