"use client"; import { useEffect, useState } from "react"; import { cmsApi, OrganizationExerciseSettings } from "@/lib/api"; const featureCards: Array<{ key: keyof Omit; title: string; description: string; }> = [ { key: "audio_response_enabled", title: "Audio Response", description: "Permite ejercicios donde el alumno responde grabando audio.", }, { key: "hotspot_enabled", title: "Hotspot", description: "Permite actividades visuales con puntos interactivos sobre imágenes.", }, { key: "memory_match_enabled", title: "Memory Match", description: "Permite juegos de memoria y emparejamiento visual.", }, { key: "peer_review_enabled", title: "Peer Review", description: "Permite actividades donde estudiantes revisan entregas de otros.", }, { key: "role_playing_enabled", title: "Role Playing", description: "Permite simulaciones de conversación con IA.", }, { key: "mermaid_enabled", title: "Mermaid Diagram", description: "Permite diagramas Mermaid y su generación asistida.", }, { key: "code_lab_enabled", title: "Code Lab", description: "Permite laboratorios de código generados o editados manualmente.", }, ]; const defaultSettings: OrganizationExerciseSettings = { organization_id: "", audio_response_enabled: true, hotspot_enabled: true, memory_match_enabled: true, peer_review_enabled: true, role_playing_enabled: true, mermaid_enabled: false, code_lab_enabled: true, }; export default function ExerciseFeatureSettings() { const [settings, setSettings] = useState(defaultSettings); const [loading, setLoading] = useState(true); const [saving, setSaving] = useState(false); useEffect(() => { const loadSettings = async () => { try { const data = await cmsApi.getOrganizationExerciseSettings(); setSettings(data); } catch (error) { console.error("Failed to load exercise settings:", error); } finally { setLoading(false); } }; loadSettings(); }, []); const toggleFeature = (key: keyof Omit) => { setSettings((prev) => ({ ...prev, [key]: !prev[key], })); }; const handleSave = async () => { setSaving(true); try { const payload = { audio_response_enabled: settings.audio_response_enabled, hotspot_enabled: settings.hotspot_enabled, memory_match_enabled: settings.memory_match_enabled, peer_review_enabled: settings.peer_review_enabled, role_playing_enabled: settings.role_playing_enabled, mermaid_enabled: settings.mermaid_enabled, code_lab_enabled: settings.code_lab_enabled, }; const updated = await cmsApi.updateOrganizationExerciseSettings(payload); setSettings(updated); alert("Disponibilidad de ejercicios actualizada correctamente."); } catch (error) { console.error("Failed to update exercise settings:", error); alert("No se pudo guardar la disponibilidad de ejercicios."); } finally { setSaving(false); } }; if (loading) { return
Cargando disponibilidad de ejercicios...
; } return (
Ejercicios Disponibles

Activa o desactiva por organización qué tipos de ejercicios pueden usarse en el constructor de lecciones y en sus generadores asociados.

{featureCards.map((feature) => { const enabled = settings[feature.key]; return ( ); })}
); }