"use client"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter, } from "@/components/ui/dialog"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Upload, X } from "lucide-react"; import { useState, useRef, useEffect } from "react"; import { createGalery, uploadGaleryFile } from "@/service/galery"; export function GaleriDialog({ open, onClose, onSubmit }: any) { const [title, setTitle] = useState(""); const [description, setDescription] = useState(""); const [files, setFiles] = useState([]); const [previews, setPreviews] = useState([]); const fileRef = useRef(null); useEffect(() => { if (!files || files.length === 0) { setPreviews([]); return; } const objectUrls = files.map((file) => URL.createObjectURL(file)); setPreviews(objectUrls); return () => { objectUrls.forEach((url) => URL.revokeObjectURL(url)); }; }, [files]); const handleFileChange = (e: React.ChangeEvent) => { const files = e.target.files; if (!files) return; setFiles((prev: File[]) => [...prev, ...Array.from(files)]); }; const removeFile = (index: number) => { setFiles((prev) => prev.filter((_, i) => i !== index)); }; const handleSubmit = async () => { try { if (!title) return alert("Judul wajib diisi!"); const formData = new FormData(); formData.append("title", title); formData.append("description", description); const res = await createGalery(formData); const galleryId = res?.data?.data?.id; if (!galleryId) { alert("Galeri gagal dibuat"); return; } console.log("Galeri Created:", galleryId); for (const file of files) { const fileForm = new FormData(); fileForm.append("gallery_id", galleryId); fileForm.append("title", title); fileForm.append("file", file); const uploadRes = await uploadGaleryFile(galleryId, fileForm); console.log("File Uploaded:", uploadRes?.data); } onSubmit(); setTitle(""); setDescription(""); setFiles([]); } catch (error) { console.error("Submit failed:", error); alert("Gagal mengupload galeri"); } }; return ( {/* HEADER */}
Tambah Galeri
{/* BODY */}
{/* Judul */}
setTitle(e.target.value)} />
{/* Deskripsi */}
setDescription(e.target.value)} />
{/* Upload File */}
fileRef.current?.click()} >

Klik untuk upload atau drag & drop

PNG, JPG (max 2MB)

{/* Preview Gambar */} {previews.length > 0 && (
{previews.map((src, i) => (
{`preview-${i}`}
))}
)}
{/* FOOTER */}
); }