import { Folder } from '@/types/folder'; import { Prompt } from '@/types/prompt'; import { IconArrowBarRight, IconFolderPlus, IconMistOff, IconPlus, } from '@tabler/icons-react'; import { FC, useEffect, useState } from 'react'; import { useTranslation } from 'react-i18next'; import { PromptFolders } from '../Folders/Prompt/PromptFolders'; import { Search } from '../Sidebar/Search'; import { PromptbarSettings } from './PromptbarSettings'; import { Prompts } from './Prompts'; interface Props { prompts: Prompt[]; folders: Folder[]; onCreateFolder: (name: string) => void; onDeleteFolder: (folderId: string) => void; onUpdateFolder: (folderId: string, name: string) => void; onToggleSidebar: () => void; onCreatePrompt: () => void; onUpdatePrompt: (prompt: Prompt) => void; onDeletePrompt: (prompt: Prompt) => void; } export const Promptbar: FC = ({ folders, prompts, onCreateFolder, onDeleteFolder, onUpdateFolder, onCreatePrompt, onUpdatePrompt, onDeletePrompt, onToggleSidebar, }) => { const { t } = useTranslation('promptbar'); const [searchTerm, setSearchTerm] = useState(''); const [filteredPrompts, setFilteredPrompts] = useState(prompts); const handleUpdatePrompt = (prompt: Prompt) => { onUpdatePrompt(prompt); setSearchTerm(''); }; const handleDeletePrompt = (prompt: Prompt) => { onDeletePrompt(prompt); setSearchTerm(''); }; const handleDrop = (e: any) => { if (e.dataTransfer) { const prompt = JSON.parse(e.dataTransfer.getData('prompt')); const updatedPrompt = { ...prompt, folderId: e.target.dataset.folderId, }; onUpdatePrompt(updatedPrompt); e.target.style.background = 'none'; } }; const allowDrop = (e: any) => { e.preventDefault(); }; const highlightDrop = (e: any) => { e.target.style.background = '#343541'; }; const removeHighlight = (e: any) => { e.target.style.background = 'none'; }; useEffect(() => { if (searchTerm) { setFilteredPrompts( prompts.filter((prompt) => { const searchable = prompt.name.toLowerCase() + ' ' + prompt.description.toLowerCase() + ' ' + prompt.content.toLowerCase(); return searchable.includes(searchTerm.toLowerCase()); }), ); } else { setFilteredPrompts(prompts); } }, [searchTerm, prompts]); return (
{prompts.length > 1 && ( )}
{folders.length > 0 && (
)} {prompts.length > 0 ? (
handleDrop(e)} onDragOver={allowDrop} onDragEnter={highlightDrop} onDragLeave={removeHighlight} > !prompt.folderId)} onUpdatePrompt={handleUpdatePrompt} onDeletePrompt={handleDeletePrompt} />
) : (
{t('No prompts.')}
)}
); };