import { memo } from 'react';
import { AlertTriangle } from 'lucide-react';
import { PhotoGrid } from '@/components/common/PhotoGrid';
import { Alert, AlertDescription, AlertTitle } from '@/components/ui/alert';
import type { PhotoSubmissionItem } from '@/types/photos';
import type { PhotoForDisplay, ModerationItem } from '@/types/moderation';
interface PhotoSubmissionDisplayProps {
item: ModerationItem;
photoItems: PhotoSubmissionItem[];
loading: boolean;
onOpenPhotos: (photos: PhotoForDisplay[], index: number) => void;
}
export const PhotoSubmissionDisplay = memo(({
item,
photoItems,
loading,
onOpenPhotos
}: PhotoSubmissionDisplayProps) => {
return (
Photo Submission
{/* Submission Title */}
{item.content.title && (
Title:
{item.content.title}
)}
{/* Photos from relational table */}
{loading ? (
Loading photos...
) : photoItems.length > 0 ? (
Photos ({photoItems.length}):
{import.meta.env.DEV && photoItems[0] && (
URL: {photoItems[0].cloudflare_image_url?.slice(0, 30)}...
)}
({
id: photo.id,
url: photo.cloudflare_image_url,
filename: photo.filename || `Photo ${photo.order_index + 1}`,
caption: photo.caption,
title: photo.title,
date_taken: photo.date_taken,
}))}
onPhotoClick={(photos, index) => onOpenPhotos(photos as any, index)}
/>
) : (
No Photos Found
This photo submission has no photos attached. This may be a data integrity issue.
)}
{/* Context Information */}
{item.entity_name && (
For:
{item.entity_name}
{item.park_name && (
<>
at
{item.park_name}
>
)}
)}
);
});
PhotoSubmissionDisplay.displayName = 'PhotoSubmissionDisplay';