import useHasPermission from '@/hooks/use-has-permission'; import usePreventAutoFocus from '@/hooks/use-prevent-auto-focus'; import { m } from '@/paraglide/messages'; import { usersQueries } from '@/service/queries'; import { unbanUser } from '@/service/user.api'; import { ReturnError } from '@/types/common'; import { LockOpenIcon, ShieldWarningIcon } from '@phosphor-icons/react'; import { useMutation, useQueryClient } from '@tanstack/react-query'; import { useRouteContext } from '@tanstack/react-router'; import { UserWithRole } from 'better-auth/plugins'; import { useState } from 'react'; import { toast } from 'sonner'; import DisplayBreakLineMessage from '../DisplayBreakLineMessage'; import { Button } from '../ui/button'; import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, DialogTrigger, } from '../ui/dialog'; import { Label } from '../ui/label'; import { Tooltip, TooltipContent, TooltipTrigger } from '../ui/tooltip'; type UnbanUserProps = { data: UserWithRole; }; const UnbanUserAction = ({ data }: UnbanUserProps) => { const { session } = useRouteContext({ from: '__root__' }); const isCurrentUser = session?.user.id === data.id; const { hasPermission, isLoading } = useHasPermission('user', 'ban'); const queryClient = useQueryClient(); const [_open, _setOpen] = useState(false); const prevent = usePreventAutoFocus(); const { mutate: unbanMutation } = useMutation({ mutationFn: unbanUser, onSuccess: () => { queryClient.refetchQueries({ queryKey: usersQueries.all, }); _setOpen(false); toast.success( m.users_page_message_unbanned_success({ name: data.name }), { richColors: true, }, ); }, onError: (error: ReturnError) => { console.error(error); toast.error(m.backend_message({ code: error.code }), { richColors: true, }); }, }); const onConfirm = () => { unbanMutation({ data: { id: data.id } }); }; if (isCurrentUser || isLoading) return null; if (hasPermission) { return ( e.preventDefault()} >
{m.users_page_ui_dialog_alert_title()}
{m.users_page_ui_dialog_alert_title()}
{m.users_page_ui_dialog_alert_description({ name: data.name, email: data.email, })}
); } return null; }; export default UnbanUserAction;