import { useStore } from '@nanostores/react'; import { useState } from 'react'; import { DialogRoot, Dialog, DialogTitle, DialogButton, DialogClose } from '~/components/ui/Dialog'; import { Input } from '~/components/ui/Input'; import { useSupabaseConnection } from '~/lib/hooks/useSupabaseConnection'; import { firebaseConfig, updateFirebaseConfig } from '~/lib/stores/firebase'; export function SetupWizard() { const [open, setOpen] = useState(false); const [provider, setProvider] = useState<'supabase' | 'firebase' | null>(null); const [step, setStep] = useState(1); const firebase = useStore(firebaseConfig); const { connection: supabaseConn, connecting, handleConnect, selectProject, fetchProjectApiKeys, updateToken, } = useSupabaseConnection(); const startWizard = () => { setProvider(null); setStep(1); setOpen(true); }; const handleFirebaseSave = () => { updateFirebaseConfig(firebase); setStep(3); }; return (
{open && ( {step === 1 && (
Select a Provider
{ setProvider('supabase'); setStep(2); }}> Supabase { setProvider('firebase'); setStep(2); }}> Firebase
)} {provider === 'supabase' && step === 2 && (
Connect Supabase updateToken(e.currentTarget.value)} /> {connecting ? 'Connecting...' : 'Connect'} {supabaseConn.stats?.projects && (
{supabaseConn.stats.projects.map((p) => ( ))}
)} {supabaseConn.credentials && (
Add these to your .env.local:
{`VITE_SUPABASE_URL=${supabaseConn.credentials.supabaseUrl}\nVITE_SUPABASE_ANON_KEY=${supabaseConn.credentials.anonKey}`}
Sample code:
{`import { createClient } from '@supabase/supabase-js';\n\nexport const supabase = createClient(import.meta.env.VITE_SUPABASE_URL!, import.meta.env.VITE_SUPABASE_ANON_KEY!);`}
)}
)} {provider === 'firebase' && step === 2 && (
Firebase Configuration updateFirebaseConfig({ apiKey: e.currentTarget.value })} /> updateFirebaseConfig({ authDomain: e.currentTarget.value })} /> updateFirebaseConfig({ projectId: e.currentTarget.value })} /> Save
)} {provider === 'firebase' && step === 3 && (
Add these to your .env.local:
{`VITE_FIREBASE_API_KEY=${firebase.apiKey}\nVITE_FIREBASE_AUTH_DOMAIN=${firebase.authDomain}\nVITE_FIREBASE_PROJECT_ID=${firebase.projectId}`}
Sample code:
{`import { initializeApp } from 'firebase/app';\nimport { getAuth } from 'firebase/auth';\nimport { getFirestore } from 'firebase/firestore';\n\nconst firebaseConfig = {\n  apiKey: import.meta.env.VITE_FIREBASE_API_KEY!,\n  authDomain: import.meta.env.VITE_FIREBASE_AUTH_DOMAIN!,\n  projectId: import.meta.env.VITE_FIREBASE_PROJECT_ID!,\n};\n\nconst app = initializeApp(firebaseConfig);\nexport const auth = getAuth(app);\nexport const db = getFirestore(app);`}
)}
Close
)}
); }