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

104 lines
3.3 KiB
TypeScript

import { router } from '@inertiajs/react';
import { useState } from 'react';
import { toast } from 'sonner';
import payrollRoutes from '@/routes/payroll';
import type { Payroll } from '@/types';
export function usePayrollIndex() {
const [isFormOpen, setIsFormOpen] = useState(false);
const [selectedPayroll, setSelectedPayroll] = useState<Payroll | null>(null);
const [isDeleteDialogOpen, setIsDeleteDialogOpen] = useState(false);
const [isBulkDeleteDialogOpen, setIsBulkDeleteDialogOpen] = useState(false);
const [payrollToDelete, setPayrollToDelete] = useState<Payroll | null>(null);
const [rowsToDelete, setRowsToDelete] = useState<any[]>([]);
const [rowSelection, setRowSelection] = useState({});
const [isGenerating, setIsGenerating] = useState(false);
const onGenerate = () => {
setIsGenerating(true);
router.post(payrollRoutes.generate().url, {}, {
onSuccess: (response: any) => {
console.log(response)
toast.success(response.props.flash.success);
setIsGenerating(false);
},
onError: (response: any) => {
console.log(response)
toast.error(response.props.flash.error);
setIsGenerating(false);
},
onFinish: () => setIsGenerating(false),
});
};
const onEdit = (payroll: Payroll) => {
setSelectedPayroll(payroll);
setIsFormOpen(true);
};
const onDelete = (payroll: Payroll) => {
setPayrollToDelete(payroll);
setIsDeleteDialogOpen(true);
};
const confirmDelete = () => {
if (payrollToDelete) {
router.delete(payrollRoutes.destroy(payrollToDelete.id).url, {
onSuccess: (response: any) => {
toast.success(response.props.flash.success);
setIsDeleteDialogOpen(false);
setPayrollToDelete(null);
setRowSelection({});
},
});
}
};
const confirmBulkDelete = () => {
router.post(payrollRoutes.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 onTogglePaid = (id: number) => {
router.patch(payrollRoutes.togglePaid(id).url, {}, {
onSuccess: (response: any) => toast.success(response.props.flash.success),
});
};
const closeForm = () => {
setIsFormOpen(false);
setTimeout(() => setSelectedPayroll(null), 200);
};
return {
isFormOpen,
selectedPayroll,
isDeleteDialogOpen,
isBulkDeleteDialogOpen,
payrollToDelete,
rowsToDelete,
rowSelection,
isGenerating,
setRowSelection,
setRowsToDelete,
setIsDeleteDialogOpen,
setIsBulkDeleteDialogOpen,
onGenerate,
onEdit,
onDelete,
confirmDelete,
confirmBulkDelete,
onTogglePaid,
closeForm,
};
}