From 1eaf5cc4e41911a76b71d95a142fa9a31a23a788 Mon Sep 17 00:00:00 2001 From: Guillermo Arrieta Medina Date: Tue, 10 Mar 2026 14:21:29 -0600 Subject: [PATCH] wip --- .../nueva/NuevaBibliografiaModalContainer.tsx | 288 ++++++++++++------ 1 file changed, 189 insertions(+), 99 deletions(-) diff --git a/src/features/bibliografia/nueva/NuevaBibliografiaModalContainer.tsx b/src/features/bibliografia/nueva/NuevaBibliografiaModalContainer.tsx index 0a21106..4e8703c 100644 --- a/src/features/bibliografia/nueva/NuevaBibliografiaModalContainer.tsx +++ b/src/features/bibliografia/nueva/NuevaBibliografiaModalContainer.tsx @@ -1,7 +1,7 @@ import { useNavigate } from '@tanstack/react-router' import CSL from 'citeproc' import { Globe, Loader2, Plus, RefreshCw, X } from 'lucide-react' -import { useEffect, useLayoutEffect, useMemo, useRef, useState } from 'react' +import { useEffect, useMemo, useRef, useState } from 'react' import type { BuscarBibliografiaRequest } from '@/data' import type { @@ -120,6 +120,7 @@ type BibliografiaRef = { source: BibliografiaTipoFuente raw?: GoogleBooksVolume | OpenLibraryDoc title: string + subtitle?: string authors: Array publisher?: string year?: number @@ -253,17 +254,22 @@ function endpointResultToRef(result: EndpointResult): BibliografiaRef { const volume = result.item const info = volume.volumeInfo ?? {} const title = (info.title ?? '').trim() || 'Sin título' + const subtitle = + typeof info.subtitle === 'string' ? info.subtitle.trim() : undefined const authors = Array.isArray(info.authors) ? info.authors : [] - const publisher = typeof info.publisher === 'string' ? info.publisher : undefined + const publisher = + typeof info.publisher === 'string' ? info.publisher : undefined const year = tryParseYear(info.publishedDate) const isbn = - info.industryIdentifiers?.find((x) => x?.identifier)?.identifier ?? undefined + info.industryIdentifiers?.find((x) => x.identifier)?.identifier ?? + undefined return { id: getEndpointResultId(result), source: 'BIBLIOTECA', raw: volume, title, + subtitle, authors, publisher, year, @@ -273,10 +279,15 @@ function endpointResultToRef(result: EndpointResult): BibliografiaRef { } const doc = result.item - const title = (typeof doc['title'] === 'string' ? doc['title'] : '').trim() || + const title = + (typeof doc['title'] === 'string' ? doc['title'] : '').trim() || 'Sin título' + const subtitle = + typeof doc['subtitle'] === 'string' ? doc['subtitle'].trim() : undefined const authors = Array.isArray(doc['author_name']) - ? (doc['author_name'] as Array).filter((a): a is string => typeof a === 'string') + ? (doc['author_name'] as Array).filter( + (a): a is string => typeof a === 'string', + ) : [] const publisher = Array.isArray(doc['publisher']) ? (doc['publisher'] as Array).find( @@ -287,7 +298,9 @@ function endpointResultToRef(result: EndpointResult): BibliografiaRef { : undefined const year = tryParseYearFromOpenLibrary(doc) const isbn = Array.isArray(doc['isbn']) - ? (doc['isbn'] as Array).find((x): x is string => typeof x === 'string') + ? (doc['isbn'] as Array).find( + (x): x is string => typeof x === 'string', + ) : undefined return { @@ -295,6 +308,7 @@ function endpointResultToRef(result: EndpointResult): BibliografiaRef { source: 'BIBLIOTECA', raw: doc, title, + subtitle, authors, publisher, year, @@ -320,50 +334,6 @@ function sortResultsByMostRecent(a: EndpointResult, b: EndpointResult) { return 0 } -function AutoSizeTextarea({ - value, - disabled, - placeholder, - className, - onChange, -}: { - value: string - disabled?: boolean - placeholder?: string - className?: string - onChange: (next: string) => void -}) { - const ref = useRef(null) - - const autosize = () => { - const el = ref.current - if (!el) return - el.style.height = '0px' - el.style.height = `${el.scrollHeight}px` - } - - useLayoutEffect(() => { - autosize() - }, [value]) - - return ( -