import { useState, useEffect } from 'react'; export function ImagePreview({ file }: { file: File }) { const [url, setUrl] = useState(null); useEffect(() => { const objectUrl = URL.createObjectURL(file); setUrl(objectUrl); return () => URL.revokeObjectURL(objectUrl); }, [file]); if (!url) return null; return Preview; } export function FileInput({ label, type, required, value, onChange, }: { label: string; type: 'image' | 'file' | string; required?: boolean; value: File[] | undefined | null | unknown; onChange: (files: File[]) => void; }) { const files = Array.isArray(value) ? value : (value instanceof File ? [value] : []); const handleFileChange = (e: React.ChangeEvent) => { if (e.target.files) { const newFiles = Array.from(e.target.files); onChange([...files, ...newFiles]); } // reset input so the same file can be selected again if needed e.target.value = ''; }; const removeFile = (index: number) => { const newFiles = [...files]; newFiles.splice(index, 1); onChange(newFiles); }; return (
{label} {required && *}
{files.length > 0 && (
{files.map((file, i) => (
{type === 'image' ? ( ) : (
{file.name}
)}
))}
)}
); }