From b1bbf357514207dcc7c77aa51cc36bb7a38a86ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cau=C3=AA=20Faleiros?= Date: Fri, 4 Sep 2026 13:53:35 -0300 Subject: [PATCH] feat: streamline course editor workflow --- pages/ManageCourses.tsx | 83 +++++++++++++++++++++++++++-------------- 1 file changed, 56 insertions(+), 27 deletions(-) diff --git a/pages/ManageCourses.tsx b/pages/ManageCourses.tsx index 7267934..99b6b7a 100644 --- a/pages/ManageCourses.tsx +++ b/pages/ManageCourses.tsx @@ -24,7 +24,7 @@ import { Unlock, Globe, Download - ,Copy, ChevronUp, ChevronDown + ,Copy, ChevronUp, ChevronDown, ChevronLeft, ChevronRight } from 'lucide-react'; import { Course, Comment, Attachment, Lesson, AttachmentType, LessonMedia } from '../types'; import { useToast } from '../context/ToastContext'; @@ -49,6 +49,7 @@ const CourseModal: React.FC<{ const [coverConfigured, setCoverConfigured] = useState(null); const [coverUploadMessage, setCoverUploadMessage] = useState(''); const [isCoverUploading, setIsCoverUploading] = useState(false); + const [editorStep, setEditorStep] = useState<1 | 2 | 3>(1); // Lesson Management const [lessons, setLessons] = useState([]); @@ -80,6 +81,7 @@ const CourseModal: React.FC<{ useEffect(() => { if (isOpen) { + setEditorStep(1); if (initialData) { setTitle(initialData.title); setDescription(initialData.description); @@ -320,8 +322,19 @@ const CourseModal: React.FC<{ setAttachments(attachments.filter(a => a.id !== id)); }; - const handleSubmit = async (e: React.FormEvent) => { - e.preventDefault(); + const goToEditorStep = (nextStep: 1 | 2 | 3) => { + if (nextStep > 1 && (!title.trim() || !category)) { + alert('Informe o título e a categoria do curso antes de continuar.'); + return; + } + if (nextStep > 2 && lessons.length === 0) { + alert('Adicione pelo menos uma aula antes de continuar.'); + return; + } + setEditorStep(nextStep); + }; + + const handleSubmit = async () => { if (lessons.length === 0) { alert("Adicione pelo menos uma aula à trilha."); return; @@ -360,14 +373,30 @@ const CourseModal: React.FC<{ return (
-
- - {/* Left Column: Course Details, Tips & Downloads */} -
-
-

{initialData ? 'Editar Curso' : 'Criar Curso'}

- +
+
+
+

{initialData ? 'Editar curso' : 'Novo curso'}

+

{editorStep === 1 ? 'Informações do curso' : editorStep === 2 ? 'Estruture as aulas' : 'Materiais complementares'}

+

{editorStep === 1 ? 'Defina como o curso será apresentado.' : editorStep === 2 ? 'Adicione e organize a trilha de aprendizado.' : 'Inclua os arquivos e links de apoio.'}

+ +
+ +
+ {[ + { step: 1, label: 'Curso' }, + { step: 2, label: 'Aulas' }, + { step: 3, label: 'Materiais' }, + ].map(({ step, label }) => ( + + ))} +
+
+
{/* Thumbnail */}
@@ -454,8 +483,13 @@ const CourseModal: React.FC<{
+
+ +
+
+ {/* Downloadable Materials Section */} -
+

@@ -530,21 +564,16 @@ const CourseModal: React.FC<{

))}
+
+ + +
{/* Right Column: Lessons Builder */} -
+
-
-

- {initialData ? 'Gerenciar Trilha & Aulas' : 'Estruturar Grade de Aulas'} -

- -
-
@@ -699,14 +728,14 @@ const CourseModal: React.FC<{
- {/* Submit Button */} -
+
+