import { Form, Head, router } from '@inertiajs/react'; import { ArrowDownToLine, ArrowUpFromLine, Filter, Wallet, X } from 'lucide-react'; import { useState } from 'react'; import { ConfirmDialog } from '@/components/confirm-dialog'; import { DataTable } from '@/components/data-table'; import { FileUpload } from '@/components/file-upload'; import InputError from '@/components/input-error'; import { RupiahInput } from '@/components/rupiah-input'; import { Button } from '@/components/ui/button'; import { Card, CardContent, CardHeader, CardTitle } from '@/components/ui/card'; import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle, } from '@/components/ui/dialog'; import { Input } from '@/components/ui/input'; import { Label } from '@/components/ui/label'; import { Popover, PopoverContent, PopoverTrigger } from '@/components/ui/popover'; import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from '@/components/ui/select'; import { formatCurrency } from '@/lib/utils'; import { index as cashAccountIndex, deposit, withdrawal } from '@/routes/admin/finance/cash-accounts'; import { update as updateTransaction, destroy as destroyTransaction } from '@/routes/admin/finance/cash-accounts/transactions'; import { createTransactionColumns } from './transaction-columns'; import type { CashTransaction } from './transaction-columns'; type CashAccount = { id: number; name: string; balance: number; }; type Props = { cashAccount: CashAccount | null; transactions: CashTransaction[]; filters: { type?: string; }; }; export default function CashAccountIndex({ cashAccount, transactions, filters }: Props) { const [depositOpen, setDepositOpen] = useState(false); const [withdrawalOpen, setWithdrawalOpen] = useState(false); const [editing, setEditing] = useState(null); const [deleting, setDeleting] = useState(null); const [filterOpen, setFilterOpen] = useState(false); const [depositReceiptKey, setDepositReceiptKey] = useState(null); const [depositUploading, setDepositUploading] = useState(false); const [depositFileMeta, setDepositFileMeta] = useState<{ size: number; type: string } | null>(null); const [withdrawalReceiptKey, setWithdrawalReceiptKey] = useState(null); const [withdrawalUploading, setWithdrawalUploading] = useState(false); const [withdrawalFileMeta, setWithdrawalFileMeta] = useState<{ size: number; type: string } | null>(null); const [editReceiptKey, setEditReceiptKey] = useState(null); const [editUploading, setEditUploading] = useState(false); const [editFileMeta, setEditFileMeta] = useState<{ size: number; type: string } | null>(null); const hasActiveFilters = filters.type; function applyFilter(key: string, value: string) { const newFilters = { ...filters }; if (value === '' || value === 'all') { delete newFilters[key as keyof typeof newFilters]; } else { newFilters[key as keyof typeof newFilters] = value; } router.get(cashAccountIndex(), newFilters, { preserveState: true, replace: true, }); } function clearFilters() { router.get(cashAccountIndex(), {}, { preserveState: true, replace: true, }); setFilterOpen(false); } function handleDelete() { if (!deleting) { return; } router.delete(destroyTransaction(deleting.id), { onSuccess: () => setDeleting(null), }); } const columns = createTransactionColumns({ handleEdit: (transaction) => { setEditing(transaction); setEditReceiptKey(transaction.receipt_key ?? null); }, handleDeleteClick: (transaction) => setDeleting(transaction), }); const filterToolbar = (
Filter {hasActiveFilters && ( )}
); return ( <>

Kas Toko

Saldo saat ini
{formatCurrency(cashAccount?.balance ?? 0)}
{ setDepositOpen(open); if (!open) { setDepositReceiptKey(null); setDepositFileMeta(null); } }}>
{ setDepositOpen(false); setDepositReceiptKey(null); setDepositFileMeta(null); }}> {({ errors, processing }) => ( <> Deposit
)}
{ setWithdrawalOpen(open); if (!open) { setWithdrawalReceiptKey(null); setWithdrawalFileMeta(null); } }}>
{ setWithdrawalOpen(false); setWithdrawalReceiptKey(null); setWithdrawalFileMeta(null); }}> {({ errors, processing }) => ( <> Withdrawal
)}
{ if (!open) { setEditing(null); setEditReceiptKey(null); setEditFileMeta(null); } }} > {editing && (
{ setEditing(null); setEditReceiptKey(null); setEditFileMeta(null); }}> {({ errors, processing }) => ( <> Edit Transaksi
)}
)}
{ if (!open) { setDeleting(null); } }} title="Hapus Transaksi" description={`Apakah Anda yakin ingin menghapus transaksi "${deleting?.description}"? Tindakan ini tidak dapat dibatalkan.`} confirmLabel="Hapus" onConfirm={handleDelete} />
); } CashAccountIndex.layout = { breadcrumbs: [ { title: 'Keuangan', href: cashAccountIndex(), }, { title: 'Kas Toko', href: cashAccountIndex(), }, ], };