Skip to content

Commit 32d8b7c

Browse files
committed
2 parents 36d9861 + 2a91f3e commit 32d8b7c

File tree

3 files changed

+338
-198
lines changed

3 files changed

+338
-198
lines changed
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
import React from 'react';
2+
import {
3+
Button,
4+
Center,
5+
Flex,
6+
MenuItem,
7+
Modal,
8+
ModalBody,
9+
ModalCloseButton,
10+
ModalContent,
11+
ModalFooter,
12+
ModalHeader,
13+
ModalOverlay,
14+
useDisclosure,
15+
Text,
16+
useToast,
17+
} from '@chakra-ui/react';
18+
import { useClient } from 'urql';
19+
import { FaRegTrashAlt } from 'react-icons/fa';
20+
import { DeleteUser } from '../graphql/mutation';
21+
import { capitalizeFirstLetter } from '../utils';
22+
23+
interface userDataTypes {
24+
id: string;
25+
email: string;
26+
}
27+
28+
const DeleteUserModal = ({
29+
user,
30+
updateUserList,
31+
}: {
32+
user: userDataTypes;
33+
updateUserList: Function;
34+
}) => {
35+
const client = useClient();
36+
const toast = useToast();
37+
const { isOpen, onOpen, onClose } = useDisclosure();
38+
const [userData, setUserData] = React.useState<userDataTypes>({
39+
id: '',
40+
email: '',
41+
});
42+
React.useEffect(() => {
43+
setUserData(user);
44+
}, []);
45+
const deleteHandler = async () => {
46+
const res = await client
47+
.mutation(DeleteUser, { params: { email: userData.email } })
48+
.toPromise();
49+
if (res.error) {
50+
toast({
51+
title: capitalizeFirstLetter(res.error.message),
52+
isClosable: true,
53+
status: 'error',
54+
position: 'bottom-right',
55+
});
56+
57+
return;
58+
} else if (res.data?._delete_user) {
59+
toast({
60+
title: capitalizeFirstLetter(res.data?._delete_user.message),
61+
isClosable: true,
62+
status: 'success',
63+
position: 'bottom-right',
64+
});
65+
}
66+
onClose();
67+
updateUserList();
68+
};
69+
return (
70+
<>
71+
<MenuItem onClick={onOpen}>Delete User</MenuItem>
72+
<Modal isOpen={isOpen} onClose={onClose}>
73+
<ModalOverlay />
74+
<ModalContent>
75+
<ModalHeader>Delete User</ModalHeader>
76+
<ModalCloseButton />
77+
<ModalBody>
78+
<Text fontSize="md">Are you sure?</Text>
79+
<Flex
80+
padding="5%"
81+
marginTop="5%"
82+
marginBottom="2%"
83+
border="1px solid #ff7875"
84+
borderRadius="5px"
85+
flexDirection="column"
86+
>
87+
<Text fontSize="sm">
88+
User <b>{user.email}</b> will be deleted permanently!
89+
</Text>
90+
</Flex>
91+
</ModalBody>
92+
93+
<ModalFooter>
94+
<Button
95+
leftIcon={<FaRegTrashAlt />}
96+
colorScheme="red"
97+
variant="solid"
98+
onClick={deleteHandler}
99+
isDisabled={false}
100+
>
101+
<Center h="100%" pt="5%">
102+
Delete
103+
</Center>
104+
</Button>
105+
</ModalFooter>
106+
</ModalContent>
107+
</Modal>
108+
</>
109+
);
110+
};
111+
112+
export default DeleteUserModal;

dashboard/src/graphql/mutation/index.ts

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -23,21 +23,25 @@ export const AdminLogout = `
2323
`;
2424

2525
export const UpdateEnvVariables = `
26-
mutation updateEnvVariables(
27-
$params: UpdateEnvInput!
28-
) {
26+
mutation updateEnvVariables($params: UpdateEnvInput!) {
2927
_update_env(params: $params) {
3028
message
3129
}
3230
}
3331
`;
3432

3533
export const UpdateUser = `
36-
mutation updateUser(
37-
$params: UpdateUserInput!
38-
) {
34+
mutation updateUser($params: UpdateUserInput!) {
3935
_update_user(params: $params) {
4036
id
4137
}
4238
}
4339
`;
40+
41+
export const DeleteUser = `
42+
mutation deleteUser($params: DeleteUserInput!) {
43+
_delete_user(params: $params) {
44+
message
45+
}
46+
}
47+
`;

0 commit comments

Comments
 (0)