dress/resources/js/pages/admin/finance/expense/hooks/use-expense-index.ts

96 lines
2.8 KiB
TypeScript

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<Expense | null>(null);
const [isDeleteDialogOpen, setIsDeleteDialogOpen] = useState(false);
const [isBulkDeleteDialogOpen, setIsBulkDeleteDialogOpen] = useState(false);
const [expenseToDelete, setExpenseToDelete] = useState<Expense | null>(null);
const [rowsToDelete, setRowsToDelete] = useState<any[]>([]);
const [rowSelection, setRowSelection] = useState({});
const [selectedProof, setSelectedProof] = useState<string | null>(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);
};
const closeImagePreview = () => {
setSelectedProof(null);
};
return {
isFormOpen,
selectedExpense,
isDeleteDialogOpen,
isBulkDeleteDialogOpen,
expenseToDelete,
rowsToDelete,
rowSelection,
selectedProof,
setRowSelection,
setRowsToDelete,
setIsDeleteDialogOpen,
setIsBulkDeleteDialogOpen,
setSelectedProof,
onAdd,
onEdit,
onDelete,
confirmDelete,
confirmBulkDelete,
closeForm,
onPreviewImage,
closeImagePreview,
};
}