import { useState, useEffect } from 'react'; import { Box, Grid, Typography, CircularProgress, Button, Snackbar, } from '@mui/material'; import Layout from '../components/Layout'; import MediaCard from '../components/MediaCard'; import type { Asset } from '../types'; import api from '../services/api'; export default function TrashPage() { const [assets, setAssets] = useState([]); const [loading, setLoading] = useState(true); const [selectedAssets, setSelectedAssets] = useState>(new Set()); const [snackbarOpen, setSnackbarOpen] = useState(false); const [snackbarMessage, setSnackbarMessage] = useState(''); useEffect(() => { loadDeletedAssets(); }, []); const loadDeletedAssets = async () => { try { setLoading(true); // We need to get all assets and filter deleted ones // TODO: Add deleted filter to API const response = await api.listAssets({ limit: 200 }); const deletedAssets = response.items.filter((asset) => asset.deleted_at); setAssets(deletedAssets); } catch (error) { console.error('Failed to load deleted assets:', error); } finally { setLoading(false); } }; const handleSelect = (assetId: string, selected: boolean) => { const newSelected = new Set(selectedAssets); if (selected) { newSelected.add(assetId); } else { newSelected.delete(assetId); } setSelectedAssets(newSelected); }; const handleRestore = async () => { if (selectedAssets.size === 0) return; try { await Promise.all( Array.from(selectedAssets).map((assetId) => api.restoreAsset(assetId)) ); setAssets(assets.filter((a) => !selectedAssets.has(a.id))); setSelectedAssets(new Set()); showSnackbar('Файлы восстановлены'); } catch (error) { console.error('Failed to restore assets:', error); showSnackbar('Ошибка при восстановлении файлов'); } }; const handlePurge = async () => { if (selectedAssets.size === 0) return; if (!confirm('Вы уверены? Файлы будут удалены навсегда.')) { return; } try { await Promise.all( Array.from(selectedAssets).map((assetId) => api.purgeAsset(assetId)) ); setAssets(assets.filter((a) => !selectedAssets.has(a.id))); setSelectedAssets(new Set()); showSnackbar('Файлы удалены навсегда'); } catch (error) { console.error('Failed to purge assets:', error); showSnackbar('Ошибка при удалении файлов'); } }; const showSnackbar = (message: string) => { setSnackbarMessage(message); setSnackbarOpen(true); }; return ( {/* Actions */} {selectedAssets.size > 0 && ( Выбрано: {selectedAssets.size} )} {/* Content */} {loading && ( )} {!loading && assets.length === 0 && ( Корзина пуста Удаленные файлы будут отображаться здесь )} {assets.length > 0 && ( {assets.map((asset) => ( ))} )} {/* Snackbar */} setSnackbarOpen(false)} message={snackbarMessage} /> ); }