"use client"; import { useState, useEffect, useRef } from "react"; import Link from "next/link"; import { useFamily } from "../FamilyProvider"; interface Memory { key: string; url: string; size: number; lastModified: string; } export default function MemoriesPage() { const { childId } = useFamily(); const [memories, setMemories] = useState([]); const [selected, setSelected] = useState(null); const [uploading, setUploading] = useState(false); const [uploadProgress, setUploadProgress] = useState(0); const fileRef = useRef(null); useEffect(() => { if (childId) { fetchMemories(); } }, [childId]); const fetchMemories = async () => { if (!childId) return; try { const res = await fetch(`/api/upload?childId=${childId}`); const data = await res.json(); setMemories(data.items || []); } catch (err) { console.error("Failed to fetch memories:", err); } }; const handleUpload = async (e: React.ChangeEvent) => { const file = e.target.files?.[0]; if (!file) return; setUploading(true); setUploadProgress(0); try { // Get upload key const res = await fetch("/api/upload", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ filename: file.name, contentType: file.type, childId }), }); const data = await res.json(); if (data.error) { alert("Error: " + data.error); setUploading(false); return; } const { key, publicUrl } = data; // Upload through our server (no CORS issue) const uploadRes = await fetch(`/api/upload?key=${encodeURIComponent(key)}&contentType=${encodeURIComponent(file.type)}`, { method: "PUT", body: file, }); const uploadData = await uploadRes.json(); if (uploadData.success) { setMemories([{ key, url: publicUrl, size: file.size, lastModified: new Date().toISOString() }, ...memories]); } else { alert("Upload failed: " + uploadData.error); } } catch (err) { console.error("Upload failed:", err); alert("Error: " + err); } setUploading(false); setUploadProgress(0); if (fileRef.current) fileRef.current.value = ""; }; return (

Memories 📸

{memories.length === 0 ? (
📷

No memories yet

Tap + to add your first photo

) : (
{memories.map((mem) => ( ))}
)}
{/* Upload Button */}
{/* Modal */} {selected && (
setSelected(null)}>
e.stopPropagation()}> {selected.key}
)}
); }