/** * MediaPanel.jsx - Global Media Library (Replaces ContextPanel) * Shows all media uploaded across all Ask AI sessions */ const { useState, useEffect } = React; function MediaPanel({ t }) { const [media, setMedia] = useState({ images: [], documents: [], audio: [] }); const [loading, setLoading] = useState(true); const [selectedTab, setSelectedTab] = useState('images'); const API_URL = window.API_URL || '/api'; const token = localStorage.getItem('token'); useEffect(() => { fetchMedia(); }, []); const fetchMedia = async () => { try { setLoading(true); const response = await fetch(`${API_URL}/ask/media`, { headers: { 'Authorization': `Bearer ${token}` } }); const data = await response.json(); setMedia(data.media || { images: [], documents: [], audio: [] }); } catch (error) { console.error('Failed to fetch media:', error); } finally { setLoading(false); } }; const renderMediaItem = (item) => { const isImage = item.filepath && (item.filepath.match(/\.(jpg|jpeg|png|gif|webp)$/i)); return (
{ e.currentTarget.style.borderColor = '#667eea'; e.currentTarget.style.boxShadow = '0 2px 8px rgba(102, 126, 234, 0.2)'; }} onMouseLeave={e => { e.currentTarget.style.borderColor = '#e2e8f0'; e.currentTarget.style.boxShadow = 'none'; }} > {isImage ? ( {item.filename} ) : (
{selectedTab === 'documents' ? '📄' : '🎵'}
)}
{item.filename}
{item.session_title}
); }; const tabs = [ { key: 'images', label: 'Images', count: media.images.length }, { key: 'documents', label: 'Documents', count: media.documents.length }, { key: 'audio', label: 'Audio', count: media.audio.length } ]; return (
{/* Header */}

🎨 {t('ask.mediaLibrary') || 'Media Library'}

{t('ask.mediaDescription') || 'All media across your chats'}

{/* Tabs */}
{tabs.map(tab => ( ))}
{/* Media Grid */}
{loading ? (

{t('common.loading') || 'Loading...'}

) : media[selectedTab].length === 0 ? (
{selectedTab === 'images' ? '🖼️' : selectedTab === 'documents' ? '📄' : '🎵'}

{t('ask.noMedia') || 'No media uploaded yet'}

) : (
{media[selectedTab].map(renderMediaItem)}
)}
); } window.MediaPanel = MediaPanel;