104 lines
3.3 KiB
TypeScript
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,
|
|
};
|
|
}
|