import { Head, router, Link } from '@inertiajs/react'; import type { Product } from '@/types'; import { ColumnDef } from '@tanstack/react-table'; import { Card, CardContent } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Badge } from '@/components/ui/badge'; import { Trash2, Pencil, Plus } from 'lucide-react'; import { DataTable } from '@/components/data-table'; import { DataTableColumnHeader } from '@/components/data-table-column-header'; import { useState } from 'react'; import { toast } from 'sonner'; import { TooltipContent, TooltipTrigger } from '@radix-ui/react-tooltip'; import { Tooltip } from '@/components/ui/tooltip'; import { Switch } from '@/components/ui/switch'; import productRoutes from '@/routes/product'; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogTitle, } from "@/components/ui/alert-dialog" export default function ProductIndex({ products }: { products: Product[] }) { const [isDeleteDialogOpen, setIsDeleteDialogOpen] = useState(false); const [isBulkDeleteDialogOpen, setIsBulkDeleteDialogOpen] = useState(false); const [productToDelete, setProductToDelete] = useState(null); const [rowsToDelete, setRowsToDelete] = useState([]); const [rowSelection, setRowSelection] = useState({}); const onDelete = (product: Product) => { setProductToDelete(product); setIsDeleteDialogOpen(true); }; const confirmDelete = () => { if (productToDelete) { router.delete(productRoutes.destroy(productToDelete.id).url, { onSuccess: (response: any) => { toast.success(response.props.flash.success); setIsDeleteDialogOpen(false); setProductToDelete(null); setRowSelection({}); }, }); } }; const confirmBulkDelete = () => { router.post(productRoutes.bulkDestroy().url, { ids: rowsToDelete.map((row: any) => row.id), _method: 'DELETE' }, { onSuccess: (response: any) => { toast.success(response.props.flash.success); setIsBulkDeleteDialogOpen(false); setRowsToDelete([]); setRowSelection({}); }, }); }; const onToggleStatus = (id: number) => { router.patch(productRoutes.toggleStatus(id).url, {}, { onSuccess: (response: any) => toast.success(response.props.flash.success), }); }; const columns: ColumnDef[] = [ { accessorKey: "name", header: ({ column }) => { return ( ) }, meta: { title: "Nama" }, }, { accessorKey: "categories", header: ({ column }) => { return ( ) }, meta: { title: "Kategori" }, cell: ({ row }) => { const product = row.original; return (
{product.categories?.map((category) => ( {category.title} ))} {(!product.categories || product.categories.length === 0) && ( Tanpa Kategori )}
); } }, { accessorKey: "is_active", header: "Status", meta: { title: "Status" }, cell: ({ row }) => { const product = row.original; return ( onToggleStatus(product.id)} /> ); } }, { id: "actions", header: "Aksi", cell: ({ row }) => { const product = row.original; return (

Ubah

Hapus

); }, meta: { title: "Aksi" }, }, ]; return (

Produk

{ setRowsToDelete(rows); setIsBulkDeleteDialogOpen(true); }, icon: Trash2, variant: 'destructive' }, ]} /> Hapus produk? Tindakan ini tidak dapat dibatalkan. Produk {productToDelete?.name} akan dihapus secara permanen. Batal Hapus Hapus {rowsToDelete.length} produk? Tindakan ini tidak dapat dibatalkan. {rowsToDelete.length} item yang terpilih akan dihapus secara permanen. Batal Hapus
); } ProductIndex.layout = { breadcrumbs: [ { title: 'Master', }, ], };