import { useState } from "react"; import PlusIcon from "../../public/icons/plus.svg"; import CrossIcon from "../../public/icons/cross.svg"; import YoutubeIcon from "../../public/icons/youtube.svg"; import PDFIcon from "../../public/icons/pdf.svg"; import WebIcon from "../../public/icons/web.svg"; import DocIcon from "../../public/icons/doc.svg"; import SitemapIcon from "../../public/icons/sitemap.svg"; import TextIcon from "../../public/icons/text.svg"; export default function SetSources({ setChats, embedding_model, setSelectChat, }) { const [sourceName, setSourceName] = useState(""); const [sourceValue, setSourceValue] = useState(""); const [isDropdownOpen, setIsDropdownOpen] = useState(false); const [isLoading, setIsLoading] = useState(false); const dataTypes = { youtube_video: "YouTube Video", pdf_file: "PDF File", web_page: "Web Page", doc_file: "Doc File", sitemap: "Sitemap", text: "Text", }; const dataIcons = { youtube_video: , pdf_file: , web_page: , doc_file: , sitemap: , text: , }; const handleDropdownClose = () => { setIsDropdownOpen(false); setSourceName(""); setSelectChat(true); }; const handleDropdownSelect = (dataType) => { setSourceName(dataType); setSourceValue(""); setIsDropdownOpen(false); setSelectChat(false); }; const handleAddDataSource = async (e) => { e.preventDefault(); setIsLoading(true); const addDataSourceEntry = { sender: "B", message: `Adding the following ${dataTypes[sourceName]}: ${sourceValue}`, }; setChats((prevChats) => [...prevChats, addDataSourceEntry]); let name = sourceName; let value = sourceValue; setSourceValue(""); const response = await fetch("/api/add_sources", { method: "POST", body: JSON.stringify({ embedding_model, name, value, }), headers: { "Content-Type": "application/json", }, }); if (response.ok) { const successEntry = { sender: "B", message: `Successfully added ${dataTypes[sourceName]}!`, }; setChats((prevChats) => [...prevChats, successEntry]); } else { const errorEntry = { sender: "B", message: `Failed to add ${dataTypes[sourceName]}. Please try again.`, }; setChats((prevChats) => [...prevChats, errorEntry]); } setSourceName(""); setIsLoading(false); setSelectChat(true); }; return ( <>
{isDropdownOpen && (
  • Close
  • {Object.entries(dataTypes).map(([key, value]) => (
  • handleDropdownSelect(key)} > {dataIcons[key]} {value}
  • ))}
)}
{sourceName && (
setSourceValue(e.target.value)} />
)} ); }