Skip to main content

Panel Actividades

Descripción

Vista de gestión de actividades educativas. Permite crear, editar, buscar, activar/desactivar y listar actividades con soporte para recursos multimedia, preguntas, tips motivacionales, juegos integrados y programación por fecha/semana/año.

Componentes

ComponenteRutaPropósito
ActivityDataPagecomponents/activity/data-page.tsxPágina de listado con tabla, paginación y búsqueda
ActivityComponentcomponents/activity/activity.tsxFormulario de creación/edición
table.tsxcomponents/activity/table.tsxDeprecado — tabla inline vía ListPageLayout

ActivityDataPage

Usa ListPageLayout como layout genérico. Columnas:

ColumnaRender
Títuloa.title, clase min-w-[430px]
DificultadPuntos color ámbar según a.difficulty (1 a 5)
RecursosConteo: a.resources?.length
PreguntasConteo: a.questions?.length
ProgramaciónFecha localizada desde a.schedule.date
EstadoBadge Activo/Inactivo según a.isActive

Acciones disponibles: ✏️ Editar (abre tab /Actividad/{id}) y 🔁 Activar/Desactivar (modal de confirmación con variante danger/warning).

La paginación usa estado local currentPage (default 1) y pageSize (default 12). La búsqueda se delega al componente Search con searchEntity="activity".

ActivityComponent

Formulario en tabs con las siguientes secciones envueltas en CardSection:

  1. Información Principal — Título, emoción (DropdownMenuButton con datos de getAllEmotions), dificultad numérica 1-5, toggle activo sí/no, descripción textarea.
  2. Programación — Fecha (datepicker), semana (number 1-53), año.
  3. Recursos Multimedia — Lista dinámica de recursos (video/audio) con URL, duración en segundos y autor.
  4. Preguntas — Lista dinámica de preguntas tipo abierta o múltiple. Las de tipo múltiple incluyen opciones con radio button para respuesta correcta.
  5. Tips de Apoyo Emocional — Mensajes con emoji, texto y categoría (start, question, wordsearch, matching, emotionbox, dicegame, complete).
  6. Juegos — Agregar juegos tipo WordSearch, MatchingConcepts, EmotionBox o DiceGame, cada uno con su formulario de configuración específico (WordSearchForm, MatchingConceptsForm, DiceGameForm, EmotionBoxForm).

Integración API

FunciónMétodoUso
getAll(page, pageSize)GETCarga paginada de actividades
getActivityById(id)GETCarga datos para edición
createActivity(payload)POSTCrear nueva actividad
updateActivity(id, payload)PUTActualizar actividad existente
updateActivityStatus(id, isActive, data)PATCHActivar/desactivar
assignUser(activityId, userId)POSTAsignar usuario a actividad

Payload

interface CreateActivityPayload {
title: string;
description?: string;
difficulty: number; // 1-5
isActive: boolean;
emotion: string; // ID de emoción
resources?: Resource[];
questions?: Question[];
tips?: Tip[];
games?: Game[];
schedule?: {
date: Date;
weekNumber: number;
year: number;
};
}