dress/resources/js/pages/admin/system/role/hooks/use-role-index.ts

71 lines
2.2 KiB
TypeScript

import { router } from '@inertiajs/react';
import { useState } from 'react';
import { toast } from 'sonner';
import roleRoutes from '@/routes/system/role';
import type { Role } from '@/types';
export function useRoleIndex() {
const [isDeleteDialogOpen, setIsDeleteDialogOpen] = useState(false);
const [isBulkDeleteDialogOpen, setIsBulkDeleteDialogOpen] = useState(false);
const [roleToDelete, setRoleToDelete] = useState<Role | null>(null);
const [rowsToDelete, setRowsToDelete] = useState<any[]>([]);
const [rowSelection, setRowSelection] = useState({});
const onDelete = (role: Role) => {
setRoleToDelete(role);
setIsDeleteDialogOpen(true);
};
const confirmDelete = () => {
if (roleToDelete) {
router.delete(roleRoutes.destroy(roleToDelete.id).url, {
onSuccess: (response: any) => {
const flash = response.props.flash;
if (flash?.error) {
toast.error(flash.error);
} else if (flash?.success) {
toast.success(flash.success);
}
setIsDeleteDialogOpen(false);
setRoleToDelete(null);
setRowSelection({});
},
});
}
};
const confirmBulkDelete = () => {
router.post(roleRoutes.bulkDestroy().url, {
ids: rowsToDelete.map((row: any) => row.id),
_method: 'DELETE'
}, {
onSuccess: (response: any) => {
const flash = response.props.flash;
if (flash?.error) {
toast.error(flash.error);
} else if (flash?.success) {
toast.success(flash.success);
}
setIsBulkDeleteDialogOpen(false);
setRowsToDelete([]);
setRowSelection({});
},
});
};
return {
isDeleteDialogOpen,
isBulkDeleteDialogOpen,
roleToDelete,
rowsToDelete,
rowSelection,
setRowSelection,
setRowsToDelete,
setIsDeleteDialogOpen,
setIsBulkDeleteDialogOpen,
onDelete,
confirmDelete,
confirmBulkDelete,
};
}