import React, { useState, useEffect } from 'react'; import Modal from 'react-modal'; import { GoTrash, GoStar, GoStarFill } from 'react-icons/go'; import { useQuery } from '@tanstack/react-query'; import { useLlmPrompts, } from "@/api/llmPrompts/hooks"; import { LlmPrompt } from "@/api/llmPrompts/types"; import './LlmPromptList.scss'; import LlmPromptModal from './LlmPromptModal'; import { fetchDefaultLlmPrompt } from '@/api/llmPrompts/llmPromptApi'; Modal.setAppElement('#root'); const LlmPromptList: React.FC = () => { const { prompts, isLoading, error, createPrompt, updatePrompt, setAsDefaultPrompt, deletePrompt } = useLlmPrompts(); const [sortField, setSortField] = useState('id'); const [sortDirection, setSortDirection] = useState<'asc' | 'desc'>('asc'); const [selectedPrompt, setSelectedPrompt] = useState(null); const [isModalOpen, setIsModalOpen] = useState(false); const [isEditMode, setIsEditMode] = useState(false); const handleSort = (field: keyof LlmPrompt | 'created_at') => { const newDirection = sortField === field && sortDirection === 'asc' ? 'desc' : 'asc'; setSortField(field); setSortDirection(newDirection); const sortedPrompts = [...prompts].sort((a, b) => { const aValue = field === 'created_at' ? a.created_at || '' : a[field]; const bValue = field === 'created_at' ? b.created_at || '' : b[field]; return newDirection === 'asc' ? (aValue > bValue ? 1 : -1) : (aValue < bValue ? 1 : -1); }); prompts.splice(0, prompts.length, ...sortedPrompts); }; const openEditModal = (prompt: LlmPrompt) => { setSelectedPrompt(prompt); setIsEditMode(true); setIsModalOpen(true); }; const openCreateModal = () => { setSelectedPrompt(null); // Ничего не передаем, запрос будет в модалке setIsEditMode(false); setIsModalOpen(true); }; const closeModal = () => { setSelectedPrompt(null); setIsModalOpen(false); }; const handleSave = async (prompt: LlmPrompt | Omit) => { if (isEditMode && 'id' in prompt) { await updatePrompt(prompt as LlmPrompt); } else { await createPrompt(prompt as Omit); } }; const handleDelete = async (id: number) => { if (window.confirm('Удаляем версию промпта?')) { await deletePrompt(id); } }; const handleSetDefault = async (id: number) => { await setAsDefaultPrompt(id); }; if (isLoading) return
Loading...
; if (error) return
Error: {error}
; return (

Системные промпты

handleSort('created_at')}> Промпты
{prompts.map(prompt => (
openEditModal(prompt)}> {prompt.name}
{/*
openEditModal(prompt)}> {prompt.created_at || 'N/A'}
*/}
))}
); }; export default LlmPromptList;