dress/resources/js/pages/admin/master/user/hooks/use-user-index.ts

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,
};
}