Skip to main content
Glama
UserDeleteAction.tsx4.3 kB
'use client'; import type { UserAPI } from '@intlayer/backend'; import { Form, Loader, Modal, toast } from '@intlayer/design-system'; import { useDeleteUser, useGetUserById } from '@intlayer/design-system/hooks'; import { AlertTriangle, Trash2 } from 'lucide-react'; import { useRouter } from 'next/navigation'; import { useIntlayer } from 'next-intlayer'; import { type FC, useState } from 'react'; import { PagesRoutes } from '@/Routes'; export const UserDeleteAction: FC<{ userId: string }> = ({ userId }) => { const router = useRouter(); const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false); const { data: userResponse, isLoading, error } = useGetUserById(userId); const deleteUserMutation = useDeleteUser(); const { errorMessages, deleteSection, successMessages } = useIntlayer('user-delete-action'); const user: UserAPI | undefined = userResponse?.data ?? undefined; const handleDeleteUser = async () => { if (!user) return; try { await deleteUserMutation.mutateAsync(user.id); toast({ title: successMessages.userDeleted.value, variant: 'success', }); router.push(PagesRoutes.Admin_Users); } catch (error) { toast({ title: errorMessages.deleteError.value, description: (error as Error).message, variant: 'error', }); } finally { setIsDeleteModalOpen(false); } }; if (error) { return ( <div className="p-6 text-error"> {errorMessages.loadingError}:{' '} {(error as Error)?.message ?? 'Unknown error'} </div> ); } return ( <> <Loader isLoading={isLoading}> {user ? ( <div className="rounded-lg border-2 border-red-200 bg-red-50 p-6 dark:border-red-900 dark:bg-red-950/20"> <h3 className="mb-2 flex items-center gap-2 font-semibold text-lg text-red-900 dark:text-red-100"> <AlertTriangle className="h-5 w-5" /> {deleteSection.title} </h3> <p className="mb-4 text-red-700 text-sm dark:text-red-300"> {deleteSection.description} </p> <Form.Button label={deleteSection.button.value} onClick={() => setIsDeleteModalOpen(true)} disabled={deleteUserMutation.isPending} Icon={Trash2} variant="outline" className="ml-auto" color="error" > {deleteSection.button} </Form.Button> </div> ) : ( <div className="py-12 text-center"> <p className="text-neutral-500 dark:text-neutral-400"> User not found </p> </div> )} </Loader> <Modal isOpen={isDeleteModalOpen} onClose={() => setIsDeleteModalOpen(false)} title={deleteSection.modalTitle.value} > <div className="flex flex-col gap-8 px-3 pt-4"> <div className="flex items-start gap-3 rounded-lg px-4"> <AlertTriangle className="mt-0.5 h-5 w-5 flex-shrink-0 text-red-600 dark:text-red-400" /> <div className="flex-1"> <p className="font-medium text-red-900 text-sm dark:text-red-100"> {deleteSection.modalWarning} </p> <p className="mt-1 text-red-700 text-sm dark:text-red-300"> {deleteSection.modalDescription} </p> </div> </div> <div className="flex justify-end gap-3"> <Form.Button label={deleteSection.cancelButton.value} onClick={() => setIsDeleteModalOpen(false)} disabled={deleteUserMutation.isPending} variant="outline" color="text" > {deleteSection.cancelButton} </Form.Button> <Form.Button label={deleteSection.confirmButton.value} onClick={handleDeleteUser} isLoading={deleteUserMutation.isPending} Icon={Trash2} variant="outline" color="error" > {deleteSection.confirmButton} </Form.Button> </div> </div> </Modal> </> ); };

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/aymericzip/intlayer'

If you have feedback or need assistance with the MCP directory API, please join our Discord server