import { useState, useEffect } from 'react'; import { useParams, useNavigate } from 'react-router-dom'; import { useBaaS } from '@picobaas/client/react'; import { USER_BUCKET } from '../config'; import { formatFileSize, formatDateTime, formatExpiryStatus } from '../utils/formatters'; import { getExpiryFromMetadata } from '../utils/expiry'; import LoadingSpinner from '../components/LoadingSpinner'; import ShareModal from '../components/ShareModal'; import type { ImageFile } from '../types'; export default function ImageDetailPage() { const { imageId } = useParams<{ imageId: string }>(); const navigate = useNavigate(); const { client } = useBaaS(); const [image, setImage] = useState(null); const [isLoading, setIsLoading] = useState(true); const [error, setError] = useState(null); const [showShareModal, setShowShareModal] = useState(false); const [isDeleting, setIsDeleting] = useState(false); useEffect(() => { const fetchImage = async () => { if (!imageId) { setError('Image not found'); setIsLoading(false); return; } try { const storage = client.storage.from(USER_BUCKET); const path = decodeURIComponent(imageId); const { data, error: infoError } = await storage.getFileInfo(path); if (infoError) throw infoError; if (!data) throw new Error('Image not found'); setImage({ id: data.id, path: data.path, name: data.filename || path.split('/').pop() || 'Unknown', size: data.size, mimeType: data.mime_type, url: storage.getPublicUrl(path).data.publicUrl, createdAt: new Date(data.created_at), expiresAt: getExpiryFromMetadata(data.custom_metadata), isPublic: false, ownerId: data.owner_id, }); } catch (err) { setError(err instanceof Error ? err.message : 'Failed to load image'); } finally { setIsLoading(false); } }; fetchImage(); }, [imageId, client]); const handleDelete = async () => { if (!image) return; if (!confirm('Are you sure you want to delete this image?')) return; setIsDeleting(true); try { const storage = client.storage.from(USER_BUCKET); const { error: deleteError } = await storage.remove([image.path]); if (deleteError) throw deleteError; navigate('/dashboard'); } catch (err) { alert(err instanceof Error ? err.message : 'Delete failed'); setIsDeleting(false); } }; if (isLoading) { return (
); } if (error || !image) { return (

Image not found

{error}

); } const expiryStatus = image.expiresAt ? formatExpiryStatus(image.expiresAt) : null; return (
{/* Back button */}
{/* Image */}
{image.name}
{/* Details */}
{/* Info card */}

{image.name}

Size
{formatFileSize(image.size)}
Type
{image.mimeType}
Uploaded
{formatDateTime(image.createdAt)}
{expiryStatus && (
Expires
{expiryStatus.label}
)}
{/* Actions */}
Download
{/* Share Modal */} setShowShareModal(false)} image={image} />
); }