feat: fix frontend and activate imports

This commit is contained in:
2026-03-17 13:53:12 -03:00
parent be699ad6ab
commit 31939e31ad
24 changed files with 34 additions and 2117 deletions
+4 -4
View File
@@ -23,15 +23,15 @@ export default function AdminDashboard() {
useEffect(() => {
const fetchStats = async () => {
try {
// In a real app we'd have a specific stats endpoint,
// In a real app we'd have a specific stats endpoint,
// but for now we'll calculate from lists
const [orgs, users] = await Promise.all([
cmsApi.getOrganizations(),
const [org, users] = await Promise.all([
cmsApi.getOrganization(),
cmsApi.getAllUsers()
]);
setStats({
orgs: orgs.length,
orgs: 1, // Single tenant architecture
users: users.length,
courses: 0 // We'd need a global courses count
});
+3 -3
View File
@@ -29,12 +29,12 @@ export default function UsersPage() {
const loadData = async () => {
try {
const [usersData, orgsData] = await Promise.all([
const [usersData, orgData] = await Promise.all([
cmsApi.getAllUsers(),
cmsApi.getOrganizations()
cmsApi.getOrganization()
]);
setUsers(usersData);
setOrganizations(orgsData);
setOrganizations([orgData]); // Single tenant - wrap in array for compatibility
} catch (error) {
console.error('Failed to load data', error);
} finally {
+2 -29
View File
@@ -2,15 +2,14 @@
import React, { useState, useEffect } from 'react';
import { questionBankApi, QuestionBank, QuestionBankFilters, QuestionBankType } from '@/lib/api';
import {
Plus, Search, Filter, Edit2, Trash2, Volume2, VolumeX, Download,
import {
Plus, Search, Filter, Edit2, Trash2, Download,
Upload, Sparkles, ChevronDown, ChevronUp, X, Check, AlertCircle,
Headphones, BookOpen, Tag, Hash, Globe
} from 'lucide-react';
import QuestionBankEditor from '@/components/QuestionBank/QuestionBankEditor';
import QuestionBankCard from '@/components/QuestionBank/QuestionBankCard';
import MySQLImportModal from '@/components/QuestionBank/MySQLImportModal';
import AudioGeneratorModal from '@/components/QuestionBank/AudioGeneratorModal';
export default function QuestionBankPage() {
const [questions, setQuestions] = useState<QuestionBank[]>([]);
@@ -21,8 +20,6 @@ export default function QuestionBankPage() {
const [showEditor, setShowEditor] = useState(false);
const [editingQuestion, setEditingQuestion] = useState<QuestionBank | null>(null);
const [showImportModal, setShowImportModal] = useState(false);
const [showAudioModal, setShowAudioModal] = useState(false);
const [selectedForAudio, setSelectedForAudio] = useState<string | null>(null);
const loadQuestions = async () => {
try {
@@ -67,17 +64,6 @@ export default function QuestionBankPage() {
await loadQuestions();
};
const handleAudioGenerate = (questionId: string) => {
setSelectedForAudio(questionId);
setShowAudioModal(true);
};
const handleAudioSuccess = async () => {
setShowAudioModal(false);
setSelectedForAudio(null);
await loadQuestions();
};
const getQuestionTypeLabel = (type: QuestionBankType) => {
const labels: Record<QuestionBankType, string> = {
'multiple-choice': 'Opción Múltiple',
@@ -311,7 +297,6 @@ export default function QuestionBankPage() {
question={question}
onEdit={() => handleEdit(question)}
onDelete={() => handleDelete(question.id)}
onGenerateAudio={() => handleAudioGenerate(question.id)}
/>
))}
</div>
@@ -337,18 +322,6 @@ export default function QuestionBankPage() {
onCancel={() => setShowImportModal(false)}
/>
)}
{/* Audio Generator Modal */}
{showAudioModal && selectedForAudio && (
<AudioGeneratorModal
questionId={selectedForAudio}
onSuccess={handleAudioSuccess}
onCancel={() => {
setShowAudioModal(false);
setSelectedForAudio(null);
}}
/>
)}
</div>
);
}