"use client"; import { useEffect, useState } from "react"; import Image from "next/image"; import { Eye, Pencil, Trash2, Calendar, MapPin } from "lucide-react"; import { deleteGalery, getGaleryById, getGaleryData } from "@/service/galery"; import { DialogDetailGaleri } from "../dialog/galery-detail-dialog"; import { DialogUpdateGaleri } from "../dialog/galery-update-dialog"; import { error, success } from "@/config/swal"; import withReactContent from "sweetalert2-react-content"; import Swal from "sweetalert2"; export default function Galery() { const MySwal = withReactContent(Swal); const [data, setData] = useState([]); const [page, setPage] = useState(1); const [showData, setShowData] = useState("10"); const [search, setSearch] = useState(""); const [showDetail, setShowDetail] = useState(false); const [detailData, setDetailData] = useState(null); const [showEdit, setShowEdit] = useState(false); const [editData, setEditData] = useState(null); const fetchData = async () => { try { const req = { limit: showData, page: page, search: search, }; const res = await getGaleryData(req); // Pastikan respons API sesuai bentuknya // Misal: { data: [...], total: number } setData(res?.data?.data); } catch (error) { console.error("Error fetch galeri:", error); } }; useEffect(() => { fetchData(); }, [page, showData, search]); const openDetail = async (id: number) => { try { const res = await getGaleryById(id); setDetailData(res?.data?.data); setShowDetail(true); } catch (err) { console.error("Error get detail:", err); } }; const openEdit = async (id: number) => { try { const res = await getGaleryById(id); setEditData(res?.data?.data); setShowEdit(true); } catch (error) { console.error("Error open edit:", error); } }; async function doDelete(id: any) { // loading(); const resDelete = await deleteGalery(id); if (resDelete?.error) { error(resDelete.message); return false; } close(); success("Berhasil Hapus"); fetchData(); } const handleDelete = (id: any) => { MySwal.fire({ title: "Hapus Data", icon: "warning", showCancelButton: true, cancelButtonColor: "#3085d6", confirmButtonColor: "#d33", confirmButtonText: "Hapus", }).then((result) => { if (result.isConfirmed) { doDelete(id); } }); }; return (
{/* Card Wrapper */}
{data?.map((item: any) => (
{/* Image */}
{item.title} {/* Status Badge */} {item.is_active ? "Aktif" : "Tidak Aktif"}
{/* Content */}

{item.title}

{item.desc ?? "-"}

{/* Date */}
{" "} {new Date(item.created_at).toLocaleDateString("id-ID")}
{/* Location (jika tidak ada, tampilkan strip) */}
{item.location ?? "-"}
{/* Footer Actions */}
))}
{/* Pagination */}

Menampilkan {data.length} data

{showDetail && detailData && ( setShowDetail(false)} data={detailData} /> )} {showEdit && editData && ( setShowEdit(false)} data={editData} onUpdated={fetchData} // refresh setelah update /> )}
); }