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
{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?" />
); }