import { useEffect, useState } from 'react'; import { AppShell, Stack, Card, Text, Title, ScrollArea, Group, Button, TextInput, Modal, Box, Loader, } from '@mantine/core'; import { AppShellWithMenu } from '../components/Appshell/Appshell'; import axios from 'axios'; type Nota = { id: string; titulo: string; texto: string; }; type Biblioteca = { id: string; nombre: string; descripcion: string; notas: Nota[]; }; export function Biblioteca() { const [bibliotecas, setBibliotecas] = useState([]); const [bibliotecaSeleccionada, setBibliotecaSeleccionada] = useState(null); const [modalAbierto, setModalAbierto] = useState(false); const [tituloNota, setTituloNota] = useState(''); const [contenidoNota, setContenidoNota] = useState(''); const [loadingNotas, setLoadingNotas] = useState(false); const fetchBibliotecas = async () => { try { const res = await axios.get('/api/v1/text_manager/list'); console.log('📦 Respuesta del backend:', res.data); if (!Array.isArray(res.data)) { console.error('❌ La respuesta no es un array:', res.data); return; } const bibliotecasConNotas = await Promise.all( res.data.map(async (biblio: Omit) => { const notas = await axios.get(`/api/v1/text_manager/nota/list/${biblio.id}`); return { ...biblio, notas: notas.data as Nota[] }; }) ); setBibliotecas(bibliotecasConNotas); setBibliotecaSeleccionada(bibliotecasConNotas[0] || null); } catch (error) { console.error('Error al cargar bibliotecas:', error); } }; const agregarNota = async () => { if (!bibliotecaSeleccionada) return; try { await axios.post(`/api/v1/text_manager/nota/${bibliotecaSeleccionada.id}`, { titulo: tituloNota, texto: contenidoNota, tags: [], conexiones: [], resumen: '', }); setLoadingNotas(true); const nuevasNotas = await axios.get(`/api/v1/text_manager/nota/list/${bibliotecaSeleccionada.id}`); const nuevasBibliotecas = bibliotecas.map((b) => b.id === bibliotecaSeleccionada.id ? { ...b, notas: nuevasNotas.data as Nota[] } : b ); setBibliotecas(nuevasBibliotecas); setBibliotecaSeleccionada(nuevasBibliotecas.find((b) => b.id === bibliotecaSeleccionada.id) || null); setTituloNota(''); setContenidoNota(''); setModalAbierto(false); } catch (error) { console.error('Error al agregar nota:', error); } finally { setLoadingNotas(false); } }; useEffect(() => { fetchBibliotecas(); }, []); return ( {bibliotecas.map((biblio) => ( ))} {bibliotecaSeleccionada ? ( {bibliotecaSeleccionada.nombre} {loadingNotas ? ( ) : ( bibliotecaSeleccionada.notas.map((nota) => ( {nota.titulo} {nota.texto} )) )} ) : ( Selecciona una biblioteca )} setModalAbierto(false)} title="Agregar nueva nota"> setTituloNota(event.currentTarget.value)} /> setContenidoNota(event.currentTarget.value)} /> ); }