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 f3b89ea5..bd5d244c 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 cecab022..1f1e5299 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 6eb85448..953e4c12 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))