feat(web): use REST API endpoint to create user

This commit is contained in:
Ali BARIN
2024-09-18 15:26:20 +00:00
committed by Faruk AYDIN
parent 805d1fdd52
commit cfec447d8a
2 changed files with 36 additions and 16 deletions

View File

@@ -0,0 +1,21 @@
import { useMutation, useQueryClient } from '@tanstack/react-query';
import api from 'helpers/api';
export default function useAdminCreateUser() {
const queryClient = useQueryClient();
const query = useMutation({
mutationFn: async (payload) => {
const { data } = await api.post('/v1/admin/users', payload);
return data;
},
onSuccess: () => {
queryClient.invalidateQueries({
queryKey: ['admin', 'users'],
});
},
});
return query;
}

View File

@@ -1,4 +1,3 @@
import { useMutation } from '@apollo/client';
import LoadingButton from '@mui/lab/LoadingButton'; import LoadingButton from '@mui/lab/LoadingButton';
import Grid from '@mui/material/Grid'; import Grid from '@mui/material/Grid';
import Stack from '@mui/material/Stack'; import Stack from '@mui/material/Stack';
@@ -14,9 +13,9 @@ import ControlledAutocomplete from 'components/ControlledAutocomplete';
import Form from 'components/Form'; import Form from 'components/Form';
import PageTitle from 'components/PageTitle'; import PageTitle from 'components/PageTitle';
import TextField from 'components/TextField'; import TextField from 'components/TextField';
import { CREATE_USER } from 'graphql/mutations/create-user.ee';
import useFormatMessage from 'hooks/useFormatMessage'; import useFormatMessage from 'hooks/useFormatMessage';
import useRoles from 'hooks/useRoles.ee'; import useRoles from 'hooks/useRoles.ee';
import useAdminCreateUser from 'hooks/useAdminCreateUser';
function generateRoleOptions(roles) { function generateRoleOptions(roles) {
return roles?.map(({ name: label, id: value }) => ({ label, value })); return roles?.map(({ name: label, id: value }) => ({ label, value }));
@@ -24,7 +23,11 @@ function generateRoleOptions(roles) {
export default function CreateUser() { export default function CreateUser() {
const formatMessage = useFormatMessage(); const formatMessage = useFormatMessage();
const [createUser, { loading, data }] = useMutation(CREATE_USER); const {
mutateAsync: createUser,
isPending: isCreateUserPending,
data: createdUser,
} = useAdminCreateUser();
const { data: rolesData, loading: isRolesLoading } = useRoles(); const { data: rolesData, loading: isRolesLoading } = useRoles();
const roles = rolesData?.data; const roles = rolesData?.data;
const enqueueSnackbar = useEnqueueSnackbar(); const enqueueSnackbar = useEnqueueSnackbar();
@@ -33,17 +36,13 @@ export default function CreateUser() {
const handleUserCreation = async (userData) => { const handleUserCreation = async (userData) => {
try { try {
await createUser({ await createUser({
variables: {
input: {
fullName: userData.fullName, fullName: userData.fullName,
email: userData.email, email: userData.email,
role: { roleId: userData.role?.id,
id: userData.role?.id,
},
},
},
}); });
queryClient.invalidateQueries({ queryKey: ['admin', 'users'] }); queryClient.invalidateQueries({ queryKey: ['admin', 'users'] });
enqueueSnackbar(formatMessage('createUser.successfullyCreated'), { enqueueSnackbar(formatMessage('createUser.successfullyCreated'), {
variant: 'success', variant: 'success',
persist: true, persist: true,
@@ -107,13 +106,13 @@ export default function CreateUser() {
variant="contained" variant="contained"
color="primary" color="primary"
sx={{ boxShadow: 2 }} sx={{ boxShadow: 2 }}
loading={loading} loading={isCreateUserPending}
data-test="create-button" data-test="create-button"
> >
{formatMessage('createUser.submit')} {formatMessage('createUser.submit')}
</LoadingButton> </LoadingButton>
{data && ( {createdUser && (
<Alert <Alert
severity="info" severity="info"
color="primary" color="primary"
@@ -123,11 +122,11 @@ export default function CreateUser() {
{formatMessage('createUser.invitationEmailInfo', { {formatMessage('createUser.invitationEmailInfo', {
link: () => ( link: () => (
<a <a
href={data.createUser.acceptInvitationUrl} href={createdUser.data.acceptInvitationUrl}
target="_blank" target="_blank"
rel="noreferrer" rel="noreferrer"
> >
{data.createUser.acceptInvitationUrl} {createdUser.data.acceptInvitationUrl}
</a> </a>
), ),
})} })}