Semana 6. Implementación de Indicadores LED de Estado en el IDE
Tras implementar la sonda de tecleo, esta semana me he centrado en mejorar la visualización de la actividad del alumno dentro del entorno de desarrollo integrado (IDE). El objetivo ha sido incorporar indicadores LED que permitan identificar visualmente cuándo el estudiante está escribiendo código y cuándo el programa se encuentra en ejecución.
Para ello, se han integrado dos indicadores en la cabecera del entorno: TYP, asociado a la actividad de escritura, y EJEC, asociado al estado de ejecución del programa. El primero refleja la información proporcionada por la sonda de tecleo, mientras que el segundo utiliza el estado del CommsManager para determinar si el programa está ejecutándose.
El funcionamiento visual se basa en un sistema de colores: el LED de tecleo se ilumina en verde cuando se detecta actividad de escritura, mientras que el LED de ejecución se muestra en rojo cuando el programa está en marcha. Cuando los estados correspondientes están inactivos, los indicadores permanecen en gris.
Archivos involucrados
- Frontend:
ExerciseContainer.tsx,ExerciseHeader.tsxyHeaderMenu.styles.ts.
Funcionamiento e integración de los indicadores
La implementación se ha organizado en tres partes para mantener separadas la detección de eventos, la gestión del estado y la presentación visual.
- Detección de escritura: El componente
ExerciseContainer.tsxrecibe los cambios del editor mediante el eventoonCodeChange. Cuando el alumno escribe, actualiza el estadoisTypingVisual, que permanece activo hasta que transcurren cinco segundos sin detectar nuevas pulsaciones. - Comunicación del estado:
ExerciseContainer.tsxtransmite este estado al componenteExerciseHeader.tsxmediante la propiedadisTyping. De esta forma, la cabecera puede conocer la actividad de escritura sin tener que gestionar directamente los eventos del editor. - Detección de ejecución: En
ExerciseHeader.tsx, el subcomponenteExecutionControlescucha los cambios de estado delCommsManager. A partir del estado recibido, calcula la variableisExecuting, que permite determinar cuándo debe activarse el indicador de ejecución. - Representación visual: Ambos indicadores se muestran junto a sus etiquetas correspondientes. El color, el brillo y la transición visual cambian en función de los estados recibidos, proporcionando información inmediata sobre la actividad del entorno.
Refactorización de los estilos
Además de incorporar los indicadores, se ha realizado una refactorización para separar los estilos de la estructura del componente. Inicialmente, el contenedor de los LED, las etiquetas y los círculos estaban definidos mediante elementos div con estilos inline dentro de ExerciseHeader.tsx.
Para mejorar la organización y facilitar el mantenimiento del código, se han trasladado estos estilos al fichero HeaderMenu.styles.ts, utilizando styled-components.
Se han definido tres componentes estilizados:
StyledStatusContainer: organiza los indicadores en un contenedor común y establece la separación, el espaciado y el fondo.StyledStatusItem: agrupa cada indicador con su etiqueta y define la alineación y la tipografía.StyledStatusLed: representa el círculo luminoso y controla su color, su sombra y la transición entre estados mediante las propiedadesactiveyactiveColor.
Esta separación permite mantener la lógica de detección de actividad en los componentes React y centralizar la presentación visual en el fichero de estilos. De esta manera, se evita duplicar código CSS y se facilita la reutilización de los componentes.
Resultado y conclusiones
Con estos cambios, el IDE dispone de una representación visual del estado de escritura y ejecución del programa. Los indicadores permiten identificar rápidamente si el alumno está interactuando con el editor o si el código se encuentra en funcionamiento.
La refactorización también mejora la estructura del frontend, manteniendo la gestión de los estados en ExerciseContainer.tsx y ExerciseHeader.tsx, mientras que HeaderMenu.styles.ts concentra los estilos de los indicadores.
Como resultado, se obtiene una implementación más modular y mantenible, preparada para futuras mejoras en la monitorización visual de la actividad del alumno dentro del entorno de desarrollo.