import React, { useEffect, useState } from "react"; import { useForm } from "@inertiajs/react"; import { PageProps } from "@/types"; import { Button } from "@/components/ui/button"; import { Input } from "@/components/ui/input"; import { Table, TableHeader, TableRow, TableHead, TableBody, TableCell, } from "@/components/ui/table"; // import { toast } from "react-toastify"; import { useToast } from "@/hooks/use-toast"; import { Card, CardHeader, CardTitle, CardContent } from "@/components/ui/card"; import { Dialog, DialogTrigger, DialogContent, DialogHeader, DialogTitle, DialogFooter, } from "@/components/ui/dialog"; import { Search, Plus, Pencil, Trash2, ChevronLeft, ChevronRight, } from "lucide-react"; import AuthenticatedLayout from "@/layouts/authenticated-layout"; import { Head } from "@inertiajs/react"; import { Toaster } from "@/components/ui/toaster"; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select"; interface JenisKegiatan { JenisKegiatanId: number | null; NamaJenisKegiatan: string; } const ITEMS_PER_PAGE = 5; export default function JenisKegiatanIndex({ jeniskegiatan, }: PageProps<{ jeniskegiatan: JenisKegiatan[] }>) { const { data, setData, post, put, delete: destroy, reset, } = useForm({ JenisKegiatanId: null, NamaJenisKegiatan: "", }); const { toast } = useToast(); const [editing, setEditing] = useState(false); const [isModalOpen, setIsModalOpen] = useState(false); const [deleteConfirm, setDeleteConfirm] = useState( null ); const [search, setSearch] = useState(""); const [filteredJenisKegiatan, setFilteredJenisKegiatan] = useState(jeniskegiatan); const [currentPage, setCurrentPage] = useState(1); useEffect(() => { let filtered = jeniskegiatan; if (search) { filtered = filtered.filter((jeniskegiatan) => jeniskegiatan.NamaJenisKegiatan.toLowerCase().includes( search.toLowerCase() ) ); } setFilteredJenisKegiatan(filtered); setCurrentPage(1); }, [jeniskegiatan, search]); const totalPages = Math.ceil(filteredJenisKegiatan.length / ITEMS_PER_PAGE); const startIndex = (currentPage - 1) * ITEMS_PER_PAGE; const endIndex = startIndex + ITEMS_PER_PAGE; const currentItems = filteredJenisKegiatan.slice(startIndex, endIndex); const handleSearch = (e: React.ChangeEvent) => { setSearch(e.target.value); }; const handlePageChange = (page: number) => { setCurrentPage(page); }; const handleSubmit = (e: React.FormEvent) => { e.preventDefault(); if (editing) { put(`/admin/jeniskegiatan/${data.JenisKegiatanId}`, { onSuccess: () => { toast({ title: "Berhasil", description: "Jenis Kegiatan berhasil diperbarui", variant: "default", }); setIsModalOpen(false); reset(); setEditing(false); }, onError: () => { toast({ title: "Gagal", description: "Terjadi kesalahan saat memperbarui Jenis Kegiatan", variant: "destructive", }); }, }); } else { post("/admin/jeniskegiatan", { onSuccess: () => { toast({ title: "Berhasil", description: "Jenis Kegiatan berhasil dibuat", variant: "default", }); setIsModalOpen(false); reset(); }, onError: () => { toast({ title: "Gagal", description: "Terjadi kesalahan saat membuat Jenis Kegiatan", variant: "destructive", }); }, }); } }; const handleEdit = (jeniskegiatan: JenisKegiatan) => { setData({ ...jeniskegiatan }); setEditing(true); setIsModalOpen(true); }; const handleDelete = () => { if (deleteConfirm) { destroy(`/admin/jeniskegiatan/${deleteConfirm.JenisKegiatanId}`, { onSuccess: () => { toast({ title: "Berhasil", description: "Jenis Kegiatan berhasil dihapus", variant: "default", }); setDeleteConfirm(null); }, onError: () => { toast({ title: "Gagal", description: "Terjadi kesalahan saat menghapus Jenis Kegiatan", variant: "destructive", }); setDeleteConfirm(null); }, }); } }; return (
{editing ? "Ubah Jenis Kegiatan" : "Buat Jenis Kegiatan"}
setData( "NamaJenisKegiatan", e.target.value ) } className="w-full" /> {/*
*/}
{/* ID */} No Name Actions {currentItems.map( (jeniskegiatan, index) => ( {/* {category.id} */} {startIndex + index + 1} { jeniskegiatan.NamaJenisKegiatan } ) )} {currentItems.length === 0 && ( Tidak ada data )}
{/*
1 : Pengumuman
2 : Undangan
3 : Peraturan
4 : Popup Home
*/}
Showing {startIndex + 1} to{" "} {Math.min( endIndex, filteredJenisKegiatan.length )}{" "} of {filteredJenisKegiatan.length} entries
{Array.from( { length: totalPages }, (_, i) => i + 1 ).map((page) => ( ))}
{deleteConfirm && ( setDeleteConfirm(null)}> Konfirmasi Penghapusan

Apakah Anda yakin ingin menghapus " {deleteConfirm.NamaJenisKegiatan} "?
Tindakan ini tidak dapat dibatalkan.

)}
); }