import { createFileRoute, useNavigate } from '@tanstack/react-router'; import * as React from 'react'; import { Search, Eye } from 'lucide-react'; import { Badge, Button, Card, CardContent, CardHeader, Input, Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from '@imphnen-frontend-service/ui/atoms'; import { BackofficeWrapper, DataTable, } from '@imphnen-frontend-service/ui/organisms'; import { cn } from '@imphnen-frontend-service/utils'; import { ColumnDef, getCoreRowModel, getPaginationRowModel, PaginationState, RowSelectionState, useReactTable, } from '@tanstack/react-table'; import { useMySessions, TSessionListItem, } from '@imphnen-frontend-service/service'; import { SelectAllCheckbox, RowSelectCheckbox, } from '../../components/list-helpers'; export const Route = createFileRoute('/_authenticated/session-dimentorin')({ component: SessionDimentorinPage, }); function SessionDimentorinPage() { const navigate = useNavigate(); const [statusFilter, setStatusFilter] = React.useState('all'); const [rowSelection, setRowSelection] = React.useState({}); const [pagination, setPagination] = React.useState({ pageIndex: 0, pageSize: 10, }); const { data: sessionsData, isLoading } = useMySessions( statusFilter !== 'all' ? { status: statusFilter } : undefined ); const sessions: TSessionListItem[] = sessionsData?.sessions ?? []; const totalItems = sessionsData?.total ?? sessions.length; const statusVariants: Record< string, 'warning' | 'info' | 'success' | 'destructive' | 'secondary' > = { pending: 'warning', confirmed: 'info', ongoing: 'warning', completed: 'success', cancelled: 'destructive', }; const columns: ColumnDef[] = [ { id: 'select', meta: { cellClassName: cn('w-10') }, header: ({ table }) => , cell: ({ row }) => , }, { id: 'id', header: 'ID Sesi', accessorKey: 'id' }, { id: 'mentorId', header: 'Nama Mentor', accessorKey: 'mentor_id' }, { id: 'menteeName', header: 'Nama Mentee', accessorKey: 'mentee_fullname', }, { id: 'datetime', header: 'Waktu', accessorKey: 'scheduled_at', cell: ({ row }) => ( {new Date(row.original.scheduled_at).toLocaleString('id-ID')} ), }, { id: 'status', header: 'Status', accessorKey: 'status', cell: ({ row }) => ( {row.original.status} ), }, { header: 'Action', cell: ({ row }) => ( ), }, ]; const table = useReactTable({ data: sessions, columns, state: { pagination, rowSelection }, enableRowSelection: true, onRowSelectionChange: setRowSelection, getCoreRowModel: getCoreRowModel(), getPaginationRowModel: getPaginationRowModel(), onPaginationChange: setPagination, pageCount: Math.ceil(totalItems / pagination.pageSize), manualPagination: true, }); return (
{isLoading ? (
Memuat data…
) : ( setPagination((prev) => ({ ...prev, pageIndex: p - 1 })) } /> )}
); }