From 24ca75f8c6c7bd7f25db128039ac1bc2a1c1c988 Mon Sep 17 00:00:00 2001 From: neon443 <69979447+neon443@users.noreply.github.com> Date: Sun, 29 Jun 2025 12:11:31 +0100 Subject: [PATCH] added isSelected property to make isselected checking cleaner --- ShhShell/Host/HostsManager.swift | 1 + ShhShell/Keys/KeyManager.swift | 1 + ShhShell/Views/Themes/ThemeManagerView.swift | 3 ++- ShhShell/Views/Themes/ThemePreview.swift | 11 ++++++++--- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/ShhShell/Host/HostsManager.swift b/ShhShell/Host/HostsManager.swift index 2710cb9..4f4680d 100644 --- a/ShhShell/Host/HostsManager.swift +++ b/ShhShell/Host/HostsManager.swift @@ -22,6 +22,7 @@ class HostsManager: ObservableObject, @unchecked Sendable { } func loadThemes() { + userDefaults.synchronize() guard let dataTheme = userDefaults.data(forKey: "themes") else { return } guard let decodedThemes = try? JSONDecoder().decode([ThemeCodable].self, from: dataTheme) else { return } diff --git a/ShhShell/Keys/KeyManager.swift b/ShhShell/Keys/KeyManager.swift index 3ee7fbb..10bbc65 100644 --- a/ShhShell/Keys/KeyManager.swift +++ b/ShhShell/Keys/KeyManager.swift @@ -23,6 +23,7 @@ class KeyManager: ObservableObject { var tags: [String] = [] func loadTags() { + userdefaults.synchronize() let decoder = JSONDecoder() guard let data = userdefaults.data(forKey: "keyTags") else { return } guard let decoded = try? decoder.decode([String].self, from: data) else { return } diff --git a/ShhShell/Views/Themes/ThemeManagerView.swift b/ShhShell/Views/Themes/ThemeManagerView.swift index f357725..7e4a4c4 100644 --- a/ShhShell/Views/Themes/ThemeManagerView.swift +++ b/ShhShell/Views/Themes/ThemeManagerView.swift @@ -92,13 +92,14 @@ struct ThemeManagerView: View { .navigationTitle("Themes") .alert("Enter URL", isPresented: $showAlert) { TextField("", text: $importURL, prompt: Text("URL")) + Button("Cancel") {} Button() { hostsManager.downloadTheme(fromUrl: URL(string: importURL)) importURL = "" } label: { Label("Import", systemImage: "square.and.arrow.down") + .bold() } - Button("Cancel") {} } .toolbar { ToolbarItem() { diff --git a/ShhShell/Views/Themes/ThemePreview.swift b/ShhShell/Views/Themes/ThemePreview.swift index 21fa04a..a5109f4 100644 --- a/ShhShell/Views/Themes/ThemePreview.swift +++ b/ShhShell/Views/Themes/ThemePreview.swift @@ -11,6 +11,10 @@ struct ThemePreview: View { @ObservedObject var hostsManager: HostsManager @State var theme: Theme + var isSelected: Bool { + return hostsManager.isThemeSelected(theme) + } + var body: some View { ZStack(alignment: .center) { Rectangle() @@ -19,12 +23,12 @@ struct ThemePreview: View { Rectangle() .fill(theme.background.suiColor) .frame( - width: hostsManager.isThemeSelected(theme) ? 190 : 200, - height: hostsManager.isThemeSelected(theme) ? 80 : 90 + width: isSelected ? 190 : 200, + height: isSelected ? 80 : 90 ) .clipShape( RoundedRectangle( - cornerRadius: hostsManager.isThemeSelected(theme) ? 5 : 10 + cornerRadius: isSelected ? 5 : 10 ) ) VStack(alignment: .leading) { @@ -51,6 +55,7 @@ struct ThemePreview: View { } .frame(maxWidth: 200, maxHeight: 90) .clipShape(RoundedRectangle(cornerRadius: 10)) + .animation(.spring, value: isSelected) .onTapGesture { hostsManager.selectTheme(theme) }