import React, { useState, useEffect } from 'react'; import { X, Projector, Download, Loader2, FileText, Image, Activity, GitCommit } from 'lucide-react'; import { generateSlideDeck } from '../api'; const SlideDeckModal = ({ isOpen, onClose, notebookId }) => { const [generating, setGenerating] = useState(false); const [result, setResult] = useState(null); const [error, setError] = useState(null); const BACKEND_URL = import.meta.env.VITE_BACKEND_URL || 'http://localhost:8000'; useEffect(() => { if (isOpen && !result && !generating) { handleGenerate(); } }, [isOpen]); const handleGenerate = async () => { setGenerating(true); setError(null); try { const data = await generateSlideDeck(notebookId); setResult(data); } catch (err) { console.error(err); setError("Failed to generate slide deck. Please try again."); } finally { setGenerating(false); } }; if (!isOpen) return null; // Helper to get icon for visual type const getVisualIcon = (type) => { switch (type) { case 'diagram': return ; case 'chart': return ; case 'illustration': return ; default: return null; } }; return (
{/* Header */}

Slide Deck Generator

AI-Planned Presentation

{/* Content */}
{generating && (

Planning your presentation...

Analyzing documents, structuring narrative, and designing slides.

)} {error && (
{error}
)} {result && !generating && (

Presentation Ready

{result.outline.slides.length} Slides Generated

Download .pptx

Slide Plan Preview

{result.outline.slides.map((slide, idx) => (
{slide.slide_id}

{slide.slide_title}

{slide.slide_type}

{slide.speaker_notes}

{slide.visual && slide.visual.type !== 'none' && (
{getVisualIcon(slide.visual.type)} {slide.visual.type === 'diagram' ? 'Diagram' : slide.visual.type === 'chart' ? 'Chart' : 'Illustration'}: {slide.visual.description}
)}
))}
)}
); }; export default SlideDeckModal;