@@ -318,6 +318,7 @@ function DatosGenerales({
|
|||||||
<div className="space-y-6">
|
<div className="space-y-6">
|
||||||
{/* Tarjeta de Requisitos */}
|
{/* Tarjeta de Requisitos */}
|
||||||
<InfoCard
|
<InfoCard
|
||||||
|
asignaturaId={asignaturaId}
|
||||||
title="Requisitos y Seriación"
|
title="Requisitos y Seriación"
|
||||||
type="requirements"
|
type="requirements"
|
||||||
initialContent={pre}
|
initialContent={pre}
|
||||||
@@ -342,6 +343,7 @@ function DatosGenerales({
|
|||||||
|
|
||||||
{/* Tarjeta de Evaluación */}
|
{/* Tarjeta de Evaluación */}
|
||||||
<InfoCard
|
<InfoCard
|
||||||
|
asignaturaId={asignaturaId}
|
||||||
title="Sistema de Evaluación"
|
title="Sistema de Evaluación"
|
||||||
type="evaluation"
|
type="evaluation"
|
||||||
initialContent={criteriosEvaluacion}
|
initialContent={criteriosEvaluacion}
|
||||||
@@ -517,16 +519,25 @@ function InfoCard({
|
|||||||
}
|
}
|
||||||
|
|
||||||
const handleIARequest = (campoClave: string) => {
|
const handleIARequest = (campoClave: string) => {
|
||||||
console.log(placeholder)
|
console.log(campoClave)
|
||||||
|
|
||||||
|
let targetClave = campoClave
|
||||||
|
if (type === 'evaluation' && !targetClave) {
|
||||||
|
targetClave = 'criterios_de_evaluacion'
|
||||||
|
}
|
||||||
|
|
||||||
|
if (targetClave === 'contenido') {
|
||||||
|
targetClave = 'contenido_tematico'
|
||||||
|
}
|
||||||
|
console.log(targetClave)
|
||||||
|
console.log(asignaturaId)
|
||||||
|
|
||||||
// Añadimos un timestamp a la state para forzar que la navegación
|
|
||||||
// genere una nueva ubicación incluso si la ruta y los params son iguales.
|
|
||||||
navigate({
|
navigate({
|
||||||
to: '/planes/$planId/asignaturas/$asignaturaId/iaasignatura',
|
to: '/planes/$planId/asignaturas/$asignaturaId/iaasignatura',
|
||||||
params: { planId, asignaturaId: asignaturaId! },
|
params: { planId, asignaturaId: asignaturaId! },
|
||||||
state: {
|
state: {
|
||||||
activeTab: 'ia',
|
activeTab: 'ia',
|
||||||
prefillCampo: campoClave,
|
prefillCampo: targetClave,
|
||||||
prefillContenido: data,
|
prefillContenido: data,
|
||||||
_ts: Date.now(),
|
_ts: Date.now(),
|
||||||
} as any,
|
} as any,
|
||||||
@@ -581,19 +592,21 @@ function InfoCard({
|
|||||||
|
|
||||||
{!isEditing && (
|
{!isEditing && (
|
||||||
<div className="flex gap-1">
|
<div className="flex gap-1">
|
||||||
<Tooltip>
|
{type !== 'requirements' && (
|
||||||
<TooltipTrigger asChild>
|
<Tooltip>
|
||||||
<Button
|
<TooltipTrigger asChild>
|
||||||
variant="ghost"
|
<Button
|
||||||
size="icon"
|
variant="ghost"
|
||||||
className="h-8 w-8 text-blue-500 hover:bg-blue-100"
|
size="icon"
|
||||||
onClick={() => clave && handleIARequest(clave)}
|
className="h-8 w-8 text-blue-500 hover:bg-blue-100"
|
||||||
>
|
onClick={() => handleIARequest(clave)}
|
||||||
<Sparkles className="h-4 w-4" />
|
>
|
||||||
</Button>
|
<Sparkles className="h-4 w-4" />
|
||||||
</TooltipTrigger>
|
</Button>
|
||||||
<TooltipContent>Mejorar con IA</TooltipContent>
|
</TooltipTrigger>
|
||||||
</Tooltip>
|
<TooltipContent>Mejorar con IA</TooltipContent>
|
||||||
|
</Tooltip>
|
||||||
|
)}
|
||||||
|
|
||||||
<Tooltip>
|
<Tooltip>
|
||||||
<TooltipTrigger asChild>
|
<TooltipTrigger asChild>
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { useQueryClient } from '@tanstack/react-query'
|
import { useQueryClient } from '@tanstack/react-query'
|
||||||
import { useParams } from '@tanstack/react-router'
|
import { useLocation, useParams } from '@tanstack/react-router'
|
||||||
import {
|
import {
|
||||||
Sparkles,
|
Sparkles,
|
||||||
Send,
|
Send,
|
||||||
@@ -58,7 +58,7 @@ export function IAAsignaturaTab() {
|
|||||||
const { asignaturaId } = useParams({
|
const { asignaturaId } = useParams({
|
||||||
from: '/planes/$planId/asignaturas/$asignaturaId',
|
from: '/planes/$planId/asignaturas/$asignaturaId',
|
||||||
})
|
})
|
||||||
|
const location = useLocation()
|
||||||
// --- ESTADOS ---
|
// --- ESTADOS ---
|
||||||
const [activeChatId, setActiveChatId] = useState<string | undefined>(
|
const [activeChatId, setActiveChatId] = useState<string | undefined>(
|
||||||
undefined,
|
undefined,
|
||||||
@@ -269,6 +269,30 @@ export function IAAsignaturaTab() {
|
|||||||
)
|
)
|
||||||
}, [availableFields, input, showSuggestions])
|
}, [availableFields, input, showSuggestions])
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const state = location.state as any
|
||||||
|
|
||||||
|
// Verificamos si existe el timestamp (_ts) para saber que es una acción nueva
|
||||||
|
if (state?.activeTab === 'ia' && state?._ts) {
|
||||||
|
// Si el campo no está ya seleccionado, lo agregamos
|
||||||
|
if (state.prefillCampo) {
|
||||||
|
const fieldToSelect = availableFields.find(
|
||||||
|
(f) => f.key === state.prefillCampo,
|
||||||
|
)
|
||||||
|
|
||||||
|
if (fieldToSelect) {
|
||||||
|
setSelectedFields([fieldToSelect]) // Reemplaza o añade según prefieras
|
||||||
|
|
||||||
|
// Generamos un prompt inicial automático
|
||||||
|
const autoPrompt = `Mejora el contenido de: ${fieldToSelect.label}`
|
||||||
|
setInput(autoPrompt)
|
||||||
|
|
||||||
|
// Opcional: Si quieres que dispare la IA inmediatamente al llegar:
|
||||||
|
// handleSend(autoPrompt)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}, [location.state, availableFields])
|
||||||
// 2. Efecto para cerrar con ESC
|
// 2. Efecto para cerrar con ESC
|
||||||
useEffect(() => {
|
useEffect(() => {
|
||||||
const handleKeyDown = (e: KeyboardEvent) => {
|
const handleKeyDown = (e: KeyboardEvent) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user