import { useEffect } from 'react'; import { useSupabaseConnection } from '~/lib/hooks/useSupabaseConnection'; import { classNames } from '~/utils/classNames'; import { useStore } from '@nanostores/react'; import { chatId } from '~/lib/persistence/useChatHistory'; import { fetchSupabaseStats } from '~/lib/stores/supabase'; import { Dialog, DialogRoot, DialogClose, DialogTitle, DialogButton } from '~/components/ui/Dialog'; export function SupabaseConnection() { const { connection: supabaseConn, connecting, fetchingStats, isProjectsExpanded, setIsProjectsExpanded, isDropdownOpen: isDialogOpen, setIsDropdownOpen: setIsDialogOpen, handleConnect, handleDisconnect, selectProject, handleCreateProject, updateToken, isConnected, fetchProjectApiKeys, } = useSupabaseConnection(); const currentChatId = useStore(chatId); useEffect(() => { const handleOpenConnectionDialog = () => { setIsDialogOpen(true); }; document.addEventListener('open-supabase-connection', handleOpenConnectionDialog); return () => { document.removeEventListener('open-supabase-connection', handleOpenConnectionDialog); }; }, [setIsDialogOpen]); useEffect(() => { if (isConnected && currentChatId) { const savedProjectId = localStorage.getItem(`supabase-project-${currentChatId}`); /* * If there's no saved project for this chat but there is a global selected project, * use the global one instead of clearing it */ if (!savedProjectId && supabaseConn.selectedProjectId) { // Save the current global project to this chat localStorage.setItem(`supabase-project-${currentChatId}`, supabaseConn.selectedProjectId); } else if (savedProjectId && savedProjectId !== supabaseConn.selectedProjectId) { selectProject(savedProjectId); } } }, [isConnected, currentChatId]); useEffect(() => { if (currentChatId && supabaseConn.selectedProjectId) { localStorage.setItem(`supabase-project-${currentChatId}`, supabaseConn.selectedProjectId); } else if (currentChatId && !supabaseConn.selectedProjectId) { localStorage.removeItem(`supabase-project-${currentChatId}`); } }, [currentChatId, supabaseConn.selectedProjectId]); useEffect(() => { if (isConnected && supabaseConn.token) { fetchSupabaseStats(supabaseConn.token).catch(console.error); } }, [isConnected, supabaseConn.token]); useEffect(() => { if (isConnected && supabaseConn.selectedProjectId && supabaseConn.token && !supabaseConn.credentials) { fetchProjectApiKeys(supabaseConn.selectedProjectId).catch(console.error); } }, [isConnected, supabaseConn.selectedProjectId, supabaseConn.token, supabaseConn.credentials]); return (