import { Head, router, Link } from '@inertiajs/react'; import type { User } from '@/types'; import { ColumnDef } from '@tanstack/react-table'; import { Card, CardContent } from '@/components/ui/card'; import { Button } from '@/components/ui/button'; import { Trash2, Pencil, Plus, KeyRound } 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 userRoutes from '@/routes/user'; import { UserInfo } from '@/components/user-info'; import { AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogMedia, AlertDialogTitle, } from "@/components/ui/alert-dialog" export default function UserIndex({ users, defaultPassword }: { users: User[], defaultPassword: string }) { const [isDeleteDialogOpen, setIsDeleteDialogOpen] = useState(false); const [isBulkDeleteDialogOpen, setIsBulkDeleteDialogOpen] = useState(false); const [userToDelete, setUserToDelete] = useState(null); const [isResetPasswordOpen, setIsResetPasswordOpen] = useState(false); const [userToReset, setUserToReset] = useState(null); const [rowsToDelete, setRowsToDelete] = useState([]); const [rowSelection, setRowSelection] = useState({}); const onResetPassword = (user: User) => { setUserToReset(user); setIsResetPasswordOpen(true); }; const confirmResetPassword = () => { if (userToReset) { router.patch(userRoutes.resetPassword(userToReset.id).url, {}, { onSuccess: (response: any) => { toast.success(response.props.flash.success); setIsResetPasswordOpen(false); setUserToReset(null); }, }); } }; const onDelete = (user: User) => { setUserToDelete(user); setIsDeleteDialogOpen(true); }; const confirmDelete = () => { if (userToDelete) { router.delete(userRoutes.destroy(userToDelete.id).url, { onSuccess: (response: any) => { toast.success(response.props.flash.success); setIsDeleteDialogOpen(false); setUserToDelete(null); setRowSelection({}); }, }); } }; const confirmBulkDelete = () => { router.post(userRoutes.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 columns: ColumnDef[] = [ { accessorKey: "name", header: ({ column }) => { return ( ) }, meta: { title: "User" }, cell: ({ row }) => { const user = row.original; return (
); } }, { accessorKey: "username", header: ({ column }) => { return ( ) }, meta: { title: "Nama Pengguna" }, }, { accessorFn: (row) => row.profile?.phone_number, id: "phone_number", header: ({ column }) => { return ( ) }, meta: { title: "Nomor Telepon" }, }, { id: "actions", header: "Aksi", cell: ({ row }) => { const user = row.original; return (

Reset Kata Sandi

Ubah

Hapus

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

Pegawai

{ setRowsToDelete(rows); setIsBulkDeleteDialogOpen(true); }, icon: Trash2, variant: 'destructive' }, ]} /> Hapus pegawai? Tindakan ini tidak dapat dibatalkan. Pegawai {userToDelete?.name} akan dihapus secara permanen. Batal Hapus Reset password? Tindakan ini akan mereset password {userToReset?.name} menjadi {defaultPassword}. Pengguna dapat mengubahnya kembali nanti. Batal Reset Hapus {rowsToDelete.length} pegawai? Tindakan ini tidak dapat dibatalkan. {rowsToDelete.length} pegawai yang terpilih akan dihapus secara permanen. Batal Hapus
); } UserIndex.layout = { breadcrumbs: [ { title: 'Master', }, ], };