71 lines
2.2 KiB
TypeScript
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,
|
|
};
|
|
}
|