116 lines
3.7 KiB
TypeScript
116 lines
3.7 KiB
TypeScript
import userRoutes from '@/routes/user';
|
|
import type { User } from '@/types';
|
|
import { router } from '@inertiajs/react';
|
|
import { useState } from 'react';
|
|
import { toast } from 'sonner';
|
|
|
|
export function useUserIndex() {
|
|
const [isDeleteDialogOpen, setIsDeleteDialogOpen] = useState(false);
|
|
const [isBulkDeleteDialogOpen, setIsBulkDeleteDialogOpen] = useState(false);
|
|
const [userToDelete, setUserToDelete] = useState<User | null>(null);
|
|
const [isResetPasswordOpen, setIsResetPasswordOpen] = useState(false);
|
|
const [userToReset, setUserToReset] = useState<User | null>(null);
|
|
const [rowsToDelete, setRowsToDelete] = useState<any[]>([]);
|
|
const [rowSelection, setRowSelection] = useState({});
|
|
|
|
const onResetPassword = (user: User) => {
|
|
setUserToReset(user);
|
|
setIsResetPasswordOpen(true);
|
|
};
|
|
|
|
const confirmResetPassword = () => {
|
|
if (userToReset) {
|
|
router.patch(userRoutes.resetPassword(userToReset.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);
|
|
}
|
|
setIsResetPasswordOpen(false);
|
|
setUserToReset(null);
|
|
},
|
|
});
|
|
}
|
|
};
|
|
|
|
const onDelete = (user: User) => {
|
|
setUserToDelete(user);
|
|
setIsDeleteDialogOpen(true);
|
|
};
|
|
|
|
const confirmDelete = () => {
|
|
if (userToDelete) {
|
|
router.delete(userRoutes.destroy(userToDelete.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);
|
|
setUserToDelete(null);
|
|
setRowSelection({});
|
|
},
|
|
});
|
|
}
|
|
};
|
|
|
|
const confirmBulkDelete = () => {
|
|
router.post(userRoutes.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({});
|
|
},
|
|
});
|
|
};
|
|
|
|
const onToggleStatus = (user: User) => {
|
|
router.patch(userRoutes.toggleStatus(user.id).url, {}, {
|
|
preserveState: true,
|
|
preserveScroll: true,
|
|
onSuccess: (response: any) => {
|
|
const flash = response.props.flash;
|
|
if (flash?.error) {
|
|
toast.error(flash.error);
|
|
} else if (flash?.success) {
|
|
toast.success(flash.success);
|
|
}
|
|
},
|
|
});
|
|
};
|
|
|
|
return {
|
|
isDeleteDialogOpen,
|
|
isBulkDeleteDialogOpen,
|
|
userToDelete,
|
|
isResetPasswordOpen,
|
|
userToReset,
|
|
rowsToDelete,
|
|
rowSelection,
|
|
setRowSelection,
|
|
setRowsToDelete,
|
|
setIsDeleteDialogOpen,
|
|
setIsBulkDeleteDialogOpen,
|
|
setIsResetPasswordOpen,
|
|
onResetPassword,
|
|
confirmResetPassword,
|
|
onDelete,
|
|
confirmDelete,
|
|
confirmBulkDelete,
|
|
onToggleStatus,
|
|
};
|
|
}
|