import { useEffect, useRef, useState } from 'react'
export default function ChatDatabasePicker({
activeSessionId,
chatLibrary,
chatLibrarySlug,
chatLibraryStatusSuffix,
isLibrarySyncing,
libraries,
setChatLibraryForSession,
}) {
const dbPickerRef = useRef(null)
const [isDbPickerOpen, setIsDbPickerOpen] = useState(false)
useEffect(() => {
if (!isDbPickerOpen) return
const onPointerDown = (event) => {
if (!dbPickerRef.current?.contains(event.target)) {
setIsDbPickerOpen(false)
}
}
document.addEventListener('mousedown', onPointerDown)
return () => document.removeEventListener('mousedown', onPointerDown)
}, [isDbPickerOpen])
useEffect(() => {
setIsDbPickerOpen(false)
}, [activeSessionId])
return (
{isDbPickerOpen && (
{libraries.length === 0 ? (
No databases yet.
) : (
libraries.map(library => {
const selected = chatLibrarySlug === library.slug
const syncing = isLibrarySyncing(library.slug)
const status = !library.files?.length
? 'Empty'
: library.states?.is_indexed
? 'Ready'
: syncing
? 'Syncing'
: 'Needs sync'
return (
)
})
)}
)}
)
}