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';