From c315e878dd0bd13613e68e4c245215facb50e3dc Mon Sep 17 00:00:00 2001 From: Zane Staggs Date: Wed, 9 Jul 2025 16:56:54 -0700 Subject: [PATCH] added missing provider guard --- ui/desktop/src/components/ProviderGuard.tsx | 54 +++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 ui/desktop/src/components/ProviderGuard.tsx diff --git a/ui/desktop/src/components/ProviderGuard.tsx b/ui/desktop/src/components/ProviderGuard.tsx new file mode 100644 index 0000000000..76aff0ec9c --- /dev/null +++ b/ui/desktop/src/components/ProviderGuard.tsx @@ -0,0 +1,54 @@ +import { useEffect, useState } from 'react'; +import { useNavigate } from 'react-router-dom'; +import { useConfig } from './ConfigContext'; + +interface ProviderGuardProps { + children: React.ReactNode; +} + +export default function ProviderGuard({ children }: ProviderGuardProps) { + const { read } = useConfig(); + const navigate = useNavigate(); + const [isChecking, setIsChecking] = useState(true); + const [hasProvider, setHasProvider] = useState(false); + + useEffect(() => { + const checkProvider = async () => { + try { + const config = window.electron.getConfig(); + const provider = (await read('GOOSE_PROVIDER', false)) ?? config.GOOSE_DEFAULT_PROVIDER; + const model = (await read('GOOSE_MODEL', false)) ?? config.GOOSE_DEFAULT_MODEL; + + if (provider && model) { + setHasProvider(true); + } else { + console.log('No provider/model configured, redirecting to welcome'); + navigate('/welcome', { replace: true }); + } + } catch (error) { + console.error('Error checking provider configuration:', error); + // On error, assume no provider and redirect to welcome + navigate('/welcome', { replace: true }); + } finally { + setIsChecking(false); + } + }; + + checkProvider(); + }, [read, navigate]); + + if (isChecking) { + return ( +
+
+
+ ); + } + + if (!hasProvider) { + // This will be handled by the navigation above, but we return null to be safe + return null; + } + + return <>{children}; +}