import { useState, useEffect, useRef } from 'react' import { Upload, X, ImageIcon, Video, Loader2, Check, Search } from 'lucide-react' import { api } from '../api' export function MediaModal({ type, token, onSelect, onClose }) { const [items, setItems] = useState([]) const [allItems, setAllItems] = useState([]) const [loading, setLoading] = useState(true) const [uploading, setUploading] = useState(false) const [search, setSearch] = useState('') const fileRef = useRef(null) useEffect(() => { api.listMedia(token, type) .then(data => { const list = Array.isArray(data) ? data : (data.items ?? []) setAllItems(list); setItems(list); setLoading(false) }) .catch(() => setLoading(false)) }, []) useEffect(() => { if (!search.trim()) { setItems(allItems) } else { const q = search.toLowerCase() setItems(allItems.filter(it => it.filename?.toLowerCase().includes(q))) } }, [search, allItems]) const handleUpload = async file => { setUploading(true) try { const res = await api.uploadMedia(file, token) setAllItems(prev => [res, ...prev]) } catch {} setUploading(false) } const accept = type === 'image' ? 'image/*' : 'video/*' const isEmpty = !loading && items.length === 0 const isImage = type === 'image' return (
{isImage ? 'Изображения' : 'Видео'} · кликните для вставки
{search ? 'Ничего не найдено' : 'Файлы не найдены'}
{!search && ( )}