diff --git a/dashboard/src/components/DeleteUserModal.tsx b/dashboard/src/components/DeleteUserModal.tsx new file mode 100644 index 0000000..c9e5ac8 --- /dev/null +++ b/dashboard/src/components/DeleteUserModal.tsx @@ -0,0 +1,112 @@ +import React from 'react'; +import { + Button, + Center, + Flex, + MenuItem, + Modal, + ModalBody, + ModalCloseButton, + ModalContent, + ModalFooter, + ModalHeader, + ModalOverlay, + useDisclosure, + Text, + useToast, +} from '@chakra-ui/react'; +import { useClient } from 'urql'; +import { FaRegTrashAlt } from 'react-icons/fa'; +import { DeleteUser } from '../graphql/mutation'; +import { capitalizeFirstLetter } from '../utils'; + +interface userDataTypes { + id: string; + email: string; +} + +const DeleteUserModal = ({ + user, + updateUserList, +}: { + user: userDataTypes; + updateUserList: Function; +}) => { + const client = useClient(); + const toast = useToast(); + const { isOpen, onOpen, onClose } = useDisclosure(); + const [userData, setUserData] = React.useState({ + id: '', + email: '', + }); + React.useEffect(() => { + setUserData(user); + }, []); + const deleteHandler = async () => { + const res = await client + .mutation(DeleteUser, { params: { email: userData.email } }) + .toPromise(); + if (res.error) { + toast({ + title: capitalizeFirstLetter(res.error.message), + isClosable: true, + status: 'error', + position: 'bottom-right', + }); + + return; + } else if (res.data?._delete_user) { + toast({ + title: capitalizeFirstLetter(res.data?._delete_user.message), + isClosable: true, + status: 'success', + position: 'bottom-right', + }); + } + onClose(); + updateUserList(); + }; + return ( + <> + Delete User + + + + Delete User + + + Are you sure? + + + User {user.email} will be deleted permanently! + + + + + + + + + + + ); +}; + +export default DeleteUserModal; diff --git a/dashboard/src/graphql/mutation/index.ts b/dashboard/src/graphql/mutation/index.ts index 8eb652e..9736a01 100644 --- a/dashboard/src/graphql/mutation/index.ts +++ b/dashboard/src/graphql/mutation/index.ts @@ -23,9 +23,7 @@ export const AdminLogout = ` `; export const UpdateEnvVariables = ` - mutation updateEnvVariables( - $params: UpdateEnvInput! - ) { + mutation updateEnvVariables($params: UpdateEnvInput!) { _update_env(params: $params) { message } @@ -33,11 +31,17 @@ export const UpdateEnvVariables = ` `; export const UpdateUser = ` - mutation updateUser( - $params: UpdateUserInput! - ) { + mutation updateUser($params: UpdateUserInput!) { _update_user(params: $params) { id } } `; + +export const DeleteUser = ` + mutation deleteUser($params: DeleteUserInput!) { + _delete_user(params: $params) { + message + } + } +`; diff --git a/dashboard/src/pages/Users.tsx b/dashboard/src/pages/Users.tsx index bed4d0b..c8133d1 100644 --- a/dashboard/src/pages/Users.tsx +++ b/dashboard/src/pages/Users.tsx @@ -41,6 +41,7 @@ import { import { UserDetailsQuery } from '../graphql/queries'; import { UpdateUser } from '../graphql/mutation'; import EditUserModal from '../components/EditUserModal'; +import DeleteUserModal from '../components/DeleteUserModal'; interface paginationPropTypes { limit: number; @@ -206,10 +207,6 @@ export default function Users() { - {!user.email_verified && ( userVerificationHandler(user)} @@ -217,6 +214,14 @@ export default function Users() { Verify User )} + +