/**
* 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 ? (

) : (
{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;