From e5afaa0c7c5a377fb6d69cd42bd4bd6e777cf0ed Mon Sep 17 00:00:00 2001 From: "Roberto.silva" Date: Tue, 10 Mar 2026 16:08:36 -0600 Subject: [PATCH] Se agrega funcionalidad de mensajes en segundo plano y webhook de la respuesta de ia se homologa vista como en planes de estudios --- .../asignaturas/detalle/IAAsignaturaTab.tsx | 200 ++++++++++-------- 1 file changed, 111 insertions(+), 89 deletions(-) diff --git a/src/components/asignaturas/detalle/IAAsignaturaTab.tsx b/src/components/asignaturas/detalle/IAAsignaturaTab.tsx index b5046af..c584495 100644 --- a/src/components/asignaturas/detalle/IAAsignaturaTab.tsx +++ b/src/components/asignaturas/detalle/IAAsignaturaTab.tsx @@ -111,25 +111,28 @@ export function IAAsignaturaTab({ if (!rawMessages) return [] return rawMessages.flatMap((m) => { const msgs = [] + + // 1. Mensaje del usuario msgs.push({ id: `${m.id}-user`, role: 'user', content: m.mensaje }) + + // 2. Respuesta de la IA if (m.respuesta) { + // Mapeamos TODAS las recomendaciones del array + const sugerencias = + m.propuesta?.recommendations?.map((rec: any, index: number) => ({ + id: `${m.id}-sug-${index}`, // ID único por sugerencia + messageId: m.id, + campoKey: rec.campo_afectado, + campoNombre: rec.campo_afectado.replace(/_/g, ' '), + valorSugerido: rec.texto_mejora, + aceptada: rec.aplicada, + })) || [] + msgs.push({ id: `${m.id}-ai`, role: 'assistant', content: m.respuesta, - sugerencia: m.propuesta?.recommendations?.[0] - ? { - id: m.id, - campoKey: m.propuesta.recommendations[0].campo_afectado, - campoNombre: - m.propuesta.recommendations[0].campo_afectado.replace( - /_/g, - ' ', - ), - valorSugerido: m.propuesta.recommendations[0].texto_mejora, - aceptada: m.propuesta.recommendations[0].aplicada, - } - : null, + sugerencias: sugerencias, // Ahora es un plural (array) }) } return msgs @@ -271,6 +274,7 @@ export function IAAsignaturaTab({
{(showArchived ? archivedChats : activeChats).map((chat: any) => ( + // eslint-disable-next-line jsx-a11y/click-events-have-key-events, jsx-a11y/no-static-element-interactions
{ @@ -324,104 +328,122 @@ export function IAAsignaturaTab({
-
- {messages.length === 0 && !isSending && ( -
-
- -
-
-

- Nueva Consultoría IA -

-

- Selecciona campos con ":" o usa una acción rápida para - comenzar. -

-
-
- )} +
{messages.map((msg) => (
- + {msg.role === 'assistant' ? ( - + ) : ( - + )} +
- {msg.content} -
- - {msg.sugerencia && !msg.sugerencia.aceptada && ( -
-
-

- Propuesta: {msg.sugerencia.campoNombre} -

-
- {msg.sugerencia.valorSugerido} -
-
- - -
-
+ {/* Texto del mensaje principal */} +
+ {msg.content}
- )} + + {/* CONTENEDOR DE SUGERENCIAS INTEGRADO */} + {msg.role === 'assistant' && + msg.sugerencias && + msg.sugerencias.length > 0 && ( +
+

+ Mejoras disponibles: +

+ {msg.sugerencias.map((sug: any) => + sug.aceptada ? ( + /* --- ESTADO: YA APLICADO (Basado en tu última imagen) --- */ +
+
+ + {sug.campoNombre} + + + {/* Badge de Aplicado */} +
+ + Aplicado +
+
+ +
+ "{sug.valorSugerido}" +
+
+ ) : ( + /* --- ESTADO: PENDIENTE POR APLICAR --- */ +
+
+ + {sug.campoNombre} + + + +
+ +
+ "{sug.valorSugerido}" +
+
+ ), + )} +
+ )} +
))} - {isAiThinking && ( -
- - - - - -
-
-
-
-
-
-
-
- )} + {/* Espacio extra al final para que el scroll no tape el último mensaje */} +