import { createFileRoute, useNavigate } from '@tanstack/react-router'; import * as React from 'react'; import { Plus, UsersRound, UserMinus, UserCog, RefreshCcw, Pencil, Trash2, MoreHorizontal, } from 'lucide-react'; import { Button, Card, CardContent, CardDescription, CardHeader, CardTitle, DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger, } from '@imphnen-frontend-service/ui/atoms'; import { BackofficeWrapper } from '@imphnen-frontend-service/ui/organisms'; import { useUserList, useGachaItemList, useDeleteGachaItem, TGachaItemDto, } from '@imphnen-frontend-service/service'; import { toast } from 'sonner'; import { DeleteConfirmDialog } from '../../components/list-helpers'; export const Route = createFileRoute('/_authenticated/dashboard')({ component: DashboardPage, }); type StatCardProps = { icon: React.ComponentType<{ className?: string }>; label: string; value: React.ReactNode; }; function StatCard({ icon: Icon, label, value }: StatCardProps) { return ( {value} {label} ); } function DashboardPage() { const navigate = useNavigate(); const [deleteId, setDeleteId] = React.useState(null); const { data: usersData } = useUserList({ per_page: 1 }); const { data: gachaItemsData } = useGachaItemList({ per_page: 9 }); const deleteItem = useDeleteGachaItem(); const totalUsers = usersData?.meta?.total ?? 0; const gachaItems: TGachaItemDto[] = gachaItemsData?.data ?? []; const handleDelete = async (id: string) => { try { await deleteItem.mutateAsync(id); toast.success('Item berhasil dihapus'); setDeleteId(null); } catch (error) { console.log(error); toast.error('Item gagal dihapus'); } }; return ( Gacha Items Daftar item yang tersedia di gacha navigate({ to: '/dashboard/create' })} > Tambah Item {gachaItems.length === 0 ? ( Belum ada item gacha. ) : ( {gachaItems.map((item) => ( {item.name} {item.id} navigate({ to: '/dashboard/$id', params: { id: item.id }, }) } > Edit setDeleteId(item.id)} > Hapus ))} )} !o && setDeleteId(null)} onConfirm={() => deleteId && handleDelete(deleteId)} title="Hapus item gacha ini?" /> ); }
Belum ada item gacha.
{item.id}