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 })
}
/>
))}
)
}