From a6bf29934ecaf6fd568c6031c8f5abe9264e823f Mon Sep 17 00:00:00 2001 From: Eliott Wantz Date: Tue, 17 Mar 2026 12:56:29 -0400 Subject: [PATCH] fix: always show safe mode badge including silent level Remove conditional rendering of safe mode badge. The silent level should be displayed alongside other safe mode levels to ensure consistent UI and make the safe mode state always visible to users, even when set to silent. --- .../Connection/ConnectionToolbarState.swift | 4 +- .../Views/Toolbar/ConnectionStatusView.swift | 12 ++--- .../Views/Toolbar/SafeModeBadgeView.swift | 49 +++++++++---------- 3 files changed, 30 insertions(+), 35 deletions(-) diff --git a/TablePro/Models/Connection/ConnectionToolbarState.swift b/TablePro/Models/Connection/ConnectionToolbarState.swift index f3b89ea5a..bd5d244c7 100644 --- a/TablePro/Models/Connection/ConnectionToolbarState.swift +++ b/TablePro/Models/Connection/ConnectionToolbarState.swift @@ -213,9 +213,7 @@ final class ConnectionToolbarState { parts.append(String(localized: "Replication lag: \(lag)s")) } - if safeModeLevel != .silent { - parts.append(safeModeLevel.displayName) - } + parts.append(safeModeLevel.displayName) return parts.joined(separator: " • ") } diff --git a/TablePro/Views/Toolbar/ConnectionStatusView.swift b/TablePro/Views/Toolbar/ConnectionStatusView.swift index cecab0221..1f1e52998 100644 --- a/TablePro/Views/Toolbar/ConnectionStatusView.swift +++ b/TablePro/Views/Toolbar/ConnectionStatusView.swift @@ -73,13 +73,11 @@ struct ConnectionStatusView: View { .font(.system(size: 13)) .foregroundStyle(ThemeEngine.shared.colors.toolbar.secondaryTextSwiftUI) .overlay(alignment: .bottomTrailing) { - if safeModeLevel != .silent { - Image(systemName: safeModeLevel.iconName) - .font(.system(size: 7, weight: .bold)) - .foregroundStyle(safeModeLevel.badgeColor) - .offset(x: 3, y: 2) - .help(safeModeLevel.displayName) - } + Image(systemName: safeModeLevel.iconName) + .font(.system(size: 7, weight: .bold)) + .foregroundStyle(safeModeLevel.badgeColor) + .offset(x: 3, y: 2) + .help(safeModeLevel.displayName) } Text(databaseName) diff --git a/TablePro/Views/Toolbar/SafeModeBadgeView.swift b/TablePro/Views/Toolbar/SafeModeBadgeView.swift index 6eb85448e..953e4c127 100644 --- a/TablePro/Views/Toolbar/SafeModeBadgeView.swift +++ b/TablePro/Views/Toolbar/SafeModeBadgeView.swift @@ -10,36 +10,34 @@ struct SafeModeBadgeView: View { @State private var showPopover = false var body: some View { - if safeModeLevel != .silent { - Button { - showPopover.toggle() - } label: { - HStack(spacing: 4) { - Image(systemName: safeModeLevel.iconName) - .font(.system(size: 12, weight: .medium)) - .foregroundStyle(safeModeLevel.badgeColor) - } + Button { + showPopover.toggle() + } label: { + HStack(spacing: 4) { + Image(systemName: safeModeLevel.iconName) + .font(.system(size: 12, weight: .medium)) + .foregroundStyle(safeModeLevel.badgeColor) } - .buttonStyle(.plain) - .help(String(localized: "Safe Mode: \(safeModeLevel.displayName)")) - .popover(isPresented: $showPopover) { - VStack(alignment: .leading, spacing: 8) { - Text("Safe Mode") - .font(.headline) - .padding(.bottom, 4) + } + .buttonStyle(.plain) + .help(String(localized: "Safe Mode: \(safeModeLevel.displayName)")) + .popover(isPresented: $showPopover) { + VStack(alignment: .leading, spacing: 8) { + Text("Safe Mode") + .font(.headline) + .padding(.bottom, 4) - Picker("", selection: $safeModeLevel) { - ForEach(SafeModeLevel.allCases) { level in - Label(level.displayName, systemImage: level.iconName) - .tag(level) - } + Picker("", selection: $safeModeLevel) { + ForEach(SafeModeLevel.allCases) { level in + Label(level.displayName, systemImage: level.iconName) + .tag(level) } - .pickerStyle(.radioGroup) - .labelsHidden() } - .padding() - .frame(width: 200) + .pickerStyle(.radioGroup) + .labelsHidden() } + .padding() + .frame(width: 200) } } } @@ -48,6 +46,7 @@ struct SafeModeBadgeView: View { #Preview("Safe Mode Badges") { VStack(spacing: 12) { + SafeModeBadgeView(safeModeLevel: .constant(.silent)) SafeModeBadgeView(safeModeLevel: .constant(.alert)) SafeModeBadgeView(safeModeLevel: .constant(.safeMode)) SafeModeBadgeView(safeModeLevel: .constant(.readOnly))