From 6837144ad5c62026370d7ea52423dc73ce96baeb Mon Sep 17 00:00:00 2001 From: LukeGus Date: Sun, 20 Sep 2026 18:10:55 -0500 Subject: [PATCH] feat: Add option to use saved global custom theme under Connection Defaults (#1209) https://github.com/Termix-SSH/Support/issues/1209 --- src/ui/locales/en.json | 4 +- src/ui/sidebar/ConnectionDefaultsSettings.tsx | 49 +++++++++++++++++++ 2 files changed, 52 insertions(+), 1 deletion(-) diff --git a/src/ui/locales/en.json b/src/ui/locales/en.json index 8c216fbd0..eea4c7edb 100644 --- a/src/ui/locales/en.json +++ b/src/ui/locales/en.json @@ -4472,7 +4472,9 @@ "resizeReconnect": "Reconnect", "clearAll": "Clear All", "saved": "Connection defaults saved", - "saveFailed": "Failed to save connection defaults" + "saveFailed": "Failed to save connection defaults", + "savedThemeLabel": "Apply Saved Theme", + "savedThemePlaceholder": "Choose a saved theme" }, "userProfile": { "donateTitle": "Keep Termix alive", diff --git a/src/ui/sidebar/ConnectionDefaultsSettings.tsx b/src/ui/sidebar/ConnectionDefaultsSettings.tsx index ed5f78d22..fc7fdd712 100644 --- a/src/ui/sidebar/ConnectionDefaultsSettings.tsx +++ b/src/ui/sidebar/ConnectionDefaultsSettings.tsx @@ -24,6 +24,11 @@ import { type TerminalDefaults, type TriState, } from "@/lib/connection-defaults"; +import { + getUserPreferences, + parseCustomThemes, + type SavedCustomTheme, +} from "@/api/open-tabs-api"; const inputClass = "h-8 w-full border border-border bg-background px-2 text-xs outline-none focus:ring-1 focus:ring-ring"; @@ -104,6 +109,7 @@ export function ConnectionDefaultsSettings() { const [terminal, setTerminal] = useState({}); const [rdp, setRdp] = useState({}); const [saving, setSaving] = useState(false); + const [savedThemes, setSavedThemes] = useState([]); useEffect(() => { if (!defaults.ready) return; @@ -111,6 +117,13 @@ export function ConnectionDefaultsSettings() { setRdp(defaults.rdp); }, [defaults.ready, defaults.terminal, defaults.rdp]); + useEffect(() => { + if (!open) return; + getUserPreferences() + .then((prefs) => setSavedThemes(parseCustomThemes(prefs.customThemes))) + .catch(() => {}); + }, [open]); + const configuredCount = useMemo(() => { const count = (source: Record) => Object.values(source).filter((value) => value !== undefined).length; @@ -126,6 +139,17 @@ export function ConnectionDefaultsSettings() { value: RemoteDesktopDefaults[K], ) => setRdp((current) => ({ ...current, [key]: value })); + const applySavedTheme = (id: string) => { + if (!id) return; + const theme = savedThemes.find((entry) => entry.id === id); + if (!theme) return; + setTerminal((current) => ({ + ...current, + theme: "custom", + customThemeColors: { ...theme.colors }, + })); + }; + async function save() { setSaving(true); try { @@ -243,6 +267,31 @@ export function ConnectionDefaultsSettings() { + {savedThemes.length > 0 && ( + + + + )} +