import { useState } from 'react'; import { Expense } from '@/types'; import { router } from '@inertiajs/react'; import expenseRoutes from '@/routes/expense'; import { toast } from 'sonner'; export function useExpenseIndex() { const [isFormOpen, setIsFormOpen] = useState(false); const [selectedExpense, setSelectedExpense] = useState(null); const [isDeleteDialogOpen, setIsDeleteDialogOpen] = useState(false); const [isBulkDeleteDialogOpen, setIsBulkDeleteDialogOpen] = useState(false); const [expenseToDelete, setExpenseToDelete] = useState(null); const [rowsToDelete, setRowsToDelete] = useState([]); const [rowSelection, setRowSelection] = useState({}); const [selectedProof, setSelectedProof] = useState(null); const onAdd = () => { setSelectedExpense(null); setIsFormOpen(true); }; const onEdit = (expense: Expense) => { setSelectedExpense(expense); setIsFormOpen(true); }; const onDelete = (expense: Expense) => { setExpenseToDelete(expense); setIsDeleteDialogOpen(true); }; const confirmDelete = () => { if (expenseToDelete) { router.delete(expenseRoutes.destroy(expenseToDelete.id).url, { onSuccess: (response: any) => { toast.success(response.props.flash.success); setIsDeleteDialogOpen(false); setExpenseToDelete(null); setRowSelection({}); }, }); } }; const confirmBulkDelete = () => { router.post(expenseRoutes.bulkDestroy().url, { ids: rowsToDelete.map((row: any) => row.id), _method: 'DELETE' }, { onSuccess: (response: any) => { toast.success(response.props.flash.success); setIsBulkDeleteDialogOpen(false); setRowsToDelete([]); setRowSelection({}); }, }); }; const closeForm = () => { setIsFormOpen(false); setTimeout(() => setSelectedExpense(null), 200); }; const onPreviewImage = (url: string) => { setSelectedProof(url); }; return { isFormOpen, selectedExpense, isDeleteDialogOpen, isBulkDeleteDialogOpen, expenseToDelete, rowsToDelete, rowSelection, selectedProof, setRowSelection, setRowsToDelete, setIsDeleteDialogOpen, setIsBulkDeleteDialogOpen, setSelectedProof, onAdd, onEdit, onDelete, confirmDelete, confirmBulkDelete, closeForm, onPreviewImage, }; }