import { useParams } from 'common' import { Loader2, NotebookText, SquareCode } from 'lucide-react' import { useEffect, useEffectEvent, useRef, useState } from 'react' import { cn } from 'ui' import { isSqlStatement } from './ExplorerHomeTab.utils' import { ExplorerOnboarding } from './ExplorerOnboarding' import { useCreateChat, useCreateNotebook, useCreateQuery } from './hooks' import { NOTEBOOK_TEMPLATES } from './templates' import { useExplorerPreferences } from '@/components/interfaces/Account/Preferences/useExplorerPreferences' import { ActionCard } from '@/components/layouts/Tabs/ActionCard' import { CHAT_TEMPLATES } from '@/components/ui/AIAssistantPanel/AIAssistant.prompts' import { AssistantAgentHarnessFooter } from '@/components/ui/AIAssistantPanel/AssistantAgentHarnessFooter' import { AssistantChatForm } from '@/components/ui/AIAssistantPanel/AssistantChatForm' export const ExplorerHomeTab = () => { const { home, hasCompletedOnboarding, isReady } = useExplorerPreferences() if (!isReady) return if (!hasCompletedOnboarding) return if (home === 'query') return return } export const ExplorerHomeLoading = () => (
) const ExplorerHomeQuery = () => { const { ref } = useParams() const { createQuery, projectRef } = useCreateQuery() const openedProjectRef = useRef(undefined) const openQuery = useEffectEvent(() => { if (!ref || ref !== projectRef || openedProjectRef.current === ref) return openedProjectRef.current = ref createQuery({ replace: true }) }) useEffect(() => openQuery(), [ref, projectRef]) return } const ExplorerHomeContent = () => { const { createNotebook } = useCreateNotebook() const { createQuery } = useCreateQuery() const { createChat } = useCreateChat() const [value, setValue] = useState('') const isSqlQuery = isSqlStatement(value) return (

Run SQL. Chat with your project. Create a Notebook

setValue(e.target.value)} onSubmit={(message) => createChat({ initialMessage: message })} secondaryAction={ isSqlQuery ? { label: 'Run SQL', onClick: () => createQuery({ sql: value, autoRun: true }), } : undefined } />
} title="Run SQL" description="Write and run an ad-hoc query" bgColor="bg-blue-500" onClick={() => createQuery()} /> } title="Create a notebook" description="Combine notes, queries, and results" bgColor="bg-blue-500" onClick={() => createNotebook()} />

Start with a template

{NOTEBOOK_TEMPLATES.map((template) => ( } title={template.title} description={template.description} bgColor="bg-blue-500" onClick={() => createNotebook({ name: template.title, cells: template.buildCells() }) } /> ))} {CHAT_TEMPLATES.map((template) => ( } title={template.title} bgColor="bg-blue-500" onClick={() => createChat({ name: template.title, initialMessage: template.initialMessage }) } /> ))}
) }