"use client"; import { useEffect, useState } from "react"; import Image from "next/image"; import { Dialog, DialogContent, DialogHeader, DialogTitle, DialogFooter, } from "@/components/ui/dialog"; import { X } from "lucide-react"; import { getGaleryFileData, updateGalery, updateUploadGaleryFile, deleteGaleryFile, } from "@/service/galery"; import { error, success } from "@/config/swal"; import withReactContent from "sweetalert2-react-content"; import Swal from "sweetalert2"; export function DialogUpdateGaleri({ open, onClose, data, onUpdated }: any) { const [title, setTitle] = useState(""); const MySwal = withReactContent(Swal); const [description, setDescription] = useState(""); const [oldFiles, setOldFiles] = useState([]); const [newFiles, setNewFiles] = useState([]); const [newFilePreviews, setNewFilePreviews] = useState([]); const [loading, setLoading] = useState(false); const fetchOldFiles = async (galleryId: any) => { try { const res = await getGaleryFileData(galleryId); const allImages = res?.data?.data ?? []; const filtered = allImages.filter( (img: any) => img.gallery_id === galleryId ); setOldFiles(filtered); } catch (e) { console.error("Error fetching files:", e); } }; useEffect(() => { if (open && data?.id) { setTitle(data.title ?? ""); setDescription(data.description ?? data.desc ?? ""); fetchOldFiles(data.id); setNewFiles([]); setNewFilePreviews([]); } else if (!open) { } }, [open, data]); useEffect(() => { if (!newFiles || newFiles.length === 0) { setNewFilePreviews([]); return; } const urls = newFiles.map((f) => URL.createObjectURL(f)); setNewFilePreviews(urls); return () => { urls.forEach((u) => URL.revokeObjectURL(u)); }; }, [newFiles]); const handleUpload = (e: React.ChangeEvent) => { const uploaded = Array.from(e.target.files || []) as File[]; if (uploaded.length === 0) return; setNewFiles((prev) => [...prev, ...uploaded]); }; async function doDelete(id: any) { const resDelete = await deleteGaleryFile(id); if (resDelete?.error) { error(resDelete.message); return false; } success("Berhasil Hapus"); return; } const removeOldFile = (id: any) => { MySwal.fire({ title: "Hapus Data", icon: "warning", showCancelButton: true, cancelButtonColor: "#3085d6", confirmButtonColor: "#d33", confirmButtonText: "Hapus", }).then((result) => { if (result.isConfirmed) { doDelete(id); } }); }; const removeNewFile = (index: number) => { setNewFiles((prev) => prev.filter((_, i) => i !== index)); setNewFilePreviews((prev) => prev.filter((_, i) => i !== index)); }; const handleSubmit = async () => { try { if (!data?.id) { alert("Gallery ID tidak tersedia."); return; } setLoading(true); const formMain = new FormData(); formMain.append("title", title); formMain.append("description", description); formMain.append("old_files", JSON.stringify(oldFiles.map((f) => f.id))); const updateRes = await updateGalery(data.id, formMain); console.log("updateGalery response:", updateRes); if (updateRes?.error) { alert(updateRes.message || "Gagal update galeri"); setLoading(false); return; } const galleryId = data.id; const failedUploads: any[] = []; for (const file of newFiles) { try { const formFile = new FormData(); formFile.append("gallery_id", String(galleryId)); formFile.append("title", title); formFile.append("is_active", "true"); formFile.append("file", file); const uploadRes = await updateUploadGaleryFile(data.id, formFile); console.log("uploadRes:", uploadRes); if (uploadRes?.error) { failedUploads.push({ name: file.name, error: uploadRes.message, }); } } catch (err: any) { failedUploads.push({ name: file.name, error: err }); } } setLoading(false); if (failedUploads.length > 0) { let msg = failedUploads.map((f) => `${f.name}: ${f.error}`).join("\n"); alert("Ada file gagal diupload:\n" + msg); return; } onClose(); onUpdated && onUpdated(); } catch (err: any) { setLoading(false); console.error("Update error:", err); if (err?.response?.data) { alert("Server error: " + JSON.stringify(err.response.data)); } else { alert("Gagal menyimpan galeri"); } } }; return ( Edit Galeri
{/* TITLE */}
setTitle(e.target.value)} />
{/* DESCRIPTION */}