import { useState, useEffect } from 'react'; import { supabase } from '@/lib/supabaseClient'; import { PhotoGrid } from '@/components/common/PhotoGrid'; import type { PhotoSubmissionItem } from '@/types/photo-submissions'; import type { PhotoItem } from '@/types/photos'; import { getErrorMessage } from '@/lib/errorHandler'; interface PhotoSubmissionDisplayProps { submissionId: string; } export function PhotoSubmissionDisplay({ submissionId }: PhotoSubmissionDisplayProps) { const [photos, setPhotos] = useState([]); const [loading, setLoading] = useState(true); const [error, setError] = useState(null); useEffect(() => { fetchPhotos(); }, [submissionId]); const fetchPhotos = async () => { try { // Step 1: Get photo_submission_id from submission_id const { data: photoSubmission, error: photoSubmissionError } = await supabase .from('photo_submissions') .select('id, entity_type, title') .eq('submission_id', submissionId) .maybeSingle(); if (photoSubmissionError) { throw photoSubmissionError; } if (!photoSubmission) { setPhotos([]); setLoading(false); return; } // Step 2: Get photo items using photo_submission_id const { data, error } = await supabase .from('photo_submission_items') .select('*') .eq('photo_submission_id', photoSubmission.id) .order('order_index'); if (error) { throw error; } setPhotos(data || []); } catch (error: unknown) { const errorMsg = getErrorMessage(error); setPhotos([]); setError(errorMsg); } finally { setLoading(false); } }; if (loading) { return
Loading photos...
; } if (error) { return (
Error loading photos: {error}
Submission ID: {submissionId}
); } if (photos.length === 0) { return (
No photos found for this submission
ID: {submissionId}
); } // Convert PhotoSubmissionItem[] to PhotoItem[] for PhotoGrid const photoItems: PhotoItem[] = photos.map(photo => ({ 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, })); return ; }