import { createFileRoute } from '@tanstack/react-router' import * as React from 'react' import { FC, Fragment, ReactElement, useState } from 'react' import { FilterOutlined, SearchOutlined, AuditOutlined, } from '@ant-design/icons' import { Button, Input } from '@imphnen-frontend-service/ui/atoms' import { DataTable, Filter } from '@imphnen-frontend-service/ui/organisms' import { ColumnDef, getCoreRowModel, getPaginationRowModel, PaginationState, useReactTable, RowSelectionState, } from '@tanstack/react-table' import ModalValidate from './_components/transactions/modal-validate' type TransactionStatus = 'valid' | 'invalid' | 'unchecked' interface Transaction { id: number name: string transactionNumber: string status: TransactionStatus } const mockTransactions: Transaction[] = Array.from({ length: 20 }, (_, i) => ({ id: i + 1, name: i === 0 ? 'Ahmad Wijuana' : 'Nama Lengkap', transactionNumber: '25D2133Y9AFYBD', status: (i % 3 === 0 ? 'invalid' : i % 5 === 0 ? 'unchecked' : 'valid') as TransactionStatus, })) export const Route = createFileRoute('/_authenticated/transactions')({ component: TransactionsPage, }) function TransactionsPage() { const [showModalValidate, setShowModalValidate] = useState(false) const [pagination, setPagination] = React.useState({ pageIndex: 0, pageSize: 9, }) const [rowSelection, setRowSelection] = React.useState({}) const [showFilter, setShowFilter] = useState(false) const validationOptions = [ { id: 'option1', value: 'unchecked', label: 'Unchecked' }, { id: 'option2', value: 'valid', label: 'Valid' }, { id: 'option3', value: 'invalid', label: 'Invalid' }, ] const columns: ColumnDef[] = [ { id: 'select', header: ({ table }) => ( ), cell: ({ row }) => ( ), }, { header: 'No', accessorKey: 'id', }, { header: 'Nama Lengkap', accessorKey: 'name', }, { header: 'Nomor Transaksi', accessorKey: 'transactionNumber', }, { header: 'Order Valid?', accessorKey: 'status', cell: ({ row }) => { const status = row.original.status const statusColors: Record = { valid: 'bg-success-200 text-success-500', invalid: 'bg-danger-200 text-danger-500', unchecked: 'bg-warning-200 text-warning-900', } const statusText: Record = { valid: 'Valid', invalid: 'Invalid', unchecked: 'Unchecked', } return (
{statusText[status]}
) }, }, { header: 'Action', cell: ({ row }) => ( ), }, ] const table = useReactTable({ data: mockTransactions, columns, state: { pagination, rowSelection, }, enableRowSelection: true, onRowSelectionChange: setRowSelection, getCoreRowModel: getCoreRowModel(), getPaginationRowModel: getPaginationRowModel(), onPaginationChange: setPagination, pageCount: Math.ceil(mockTransactions.length / pagination.pageSize), manualPagination: false, }) return (

Validasi Transaksi

{showFilter && (
setShowFilter(false)} onFilterChange={(value) => { console.log('Selected filter:', value) }} />
)}
setShowModalValidate(false)} handleValid={() => { console.log('Action ketika user klik Valid') }} handleInvalid={() => { console.log('Action ketika user klik Tidak Valid') }} />
) }