diff --git a/components/file-preview-list.tsx b/components/file-preview-list.tsx index 0fe0ac7..1da3758 100644 --- a/components/file-preview-list.tsx +++ b/components/file-preview-list.tsx @@ -1,6 +1,6 @@ "use client"; -import React, { useEffect } from "react"; +import React, { useEffect, useState } from "react"; import Image from "next/image"; import { X } from "lucide-react"; @@ -10,6 +10,8 @@ interface FilePreviewListProps { } export function FilePreviewList({ files, onRemoveFile }: FilePreviewListProps) { + const [selectedImage, setSelectedImage] = useState(null); + // Cleanup object URLs on unmount useEffect(() => { const objectUrls = files @@ -24,34 +26,67 @@ export function FilePreviewList({ files, onRemoveFile }: FilePreviewListProps) { if (files.length === 0) return null; return ( -
- {files.map((file, index) => ( -
-
- {file.type.startsWith("image/") ? ( - {file.name} - ) : ( -
- {file.name} + <> +
+ {files.map((file, index) => { + const imageUrl = file.type.startsWith("image/") ? URL.createObjectURL(file) : null; + return ( +
+
imageUrl && setSelectedImage(imageUrl)} + > + {file.type.startsWith("image/") ? ( + {file.name} + ) : ( +
+ {file.name} +
+ )}
- )} -
+ +
+ ); + })} +
+ + {/* Image Modal/Lightbox */} + {selectedImage && ( +
setSelectedImage(null)} + > +
+ Preview e.stopPropagation()} + /> +
- ))} -
+ )} + ); }