diff --git a/src/admin/apiProvider/dataProviders/userDataProvider.ts b/src/admin/apiProvider/dataProviders/userDataProvider.ts index 1e2dcffd6..4cf136351 100644 --- a/src/admin/apiProvider/dataProviders/userDataProvider.ts +++ b/src/admin/apiProvider/dataProviders/userDataProvider.ts @@ -7,11 +7,13 @@ import { fetchGetV2AdminUsersExport, fetchGetV2AdminUsersMulti, fetchGetV2AdminUsersUUID, + fetchPostV2AdminUsersCreate, fetchPutV2AdminUsersUUID, GetV2AdminUsersError, GetV2AdminUsersExportError, GetV2AdminUsersMultiError, GetV2AdminUsersUUIDError, + PostV2AdminUsersCreateError, PutV2AdminUsersUUIDError } from "@/generated/apiComponents"; import { V2AdminUserRead } from "@/generated/apiSchemas"; @@ -34,6 +36,19 @@ const normalizeUserObject = (item: V2AdminUserRead) => ({ }); export const userDataProvider: UserDataProvider = { + //@ts-ignore + async create(__, params) { + try { + const response = await fetchPostV2AdminUsersCreate({ + body: params.data + }); + + // @ts-expect-error + return { data: { ...response.data, id: response.id } }; + } catch (err) { + throw getFormattedErrorForRA(err as PostV2AdminUsersCreateError); + } + }, //@ts-ignore async getList(_, params) { try { diff --git a/src/admin/components/App.tsx b/src/admin/components/App.tsx index a3b4e8db5..2a07ea914 100644 --- a/src/admin/components/App.tsx +++ b/src/admin/components/App.tsx @@ -34,6 +34,7 @@ const App = () => { list={modules.user.List} show={modules.user.Show} edit={modules.user.Edit} + create={modules.user.Create} icon={() => } /> { + const { isSuperAdmin } = useGetUserRole(); + + const schemaObject: any = { + first_name: yup.string().nullable().required("First Name is required"), + last_name: yup.string().nullable().required("Last Name is required"), + email_address: yup.string().nullable().required("Email Address is required").email("Invalid email format"), + phone_number: yup.string().nullable(), + job_role: yup.string().nullable(), + organisation: yup.object().nullable(), + program: yup.string().nullable(), + country: yup.string().nullable() + }; + + if (isSuperAdmin) { + schemaObject.role = yup.string().required("Role is required"); + } + + return ( + + + + + + + + + + + + + {isSuperAdmin && } + + + + + + + + + ); +}; + +export default UserCreate; diff --git a/src/admin/modules/user/components/UserShowAside.tsx b/src/admin/modules/user/components/UserShowAside.tsx index 575191f03..4f3452063 100644 --- a/src/admin/modules/user/components/UserShowAside.tsx +++ b/src/admin/modules/user/components/UserShowAside.tsx @@ -1,11 +1,27 @@ import { Box, Button, Divider, Grid, Stack, Typography } from "@mui/material"; import { useState } from "react"; -import { BooleanField, RaRecord, SelectField, TextField, useNotify, useRefresh, useShowContext } from "react-admin"; +import { + BooleanField, + RaRecord, + SelectField, + TextField, + useNotify, + useRedirect, + useRefresh, + useShowContext +} from "react-admin"; +import { When } from "react-if"; import Aside from "@/admin/components/Aside/Aside"; import { ConfirmationDialog } from "@/admin/components/Dialogs/ConfirmationDialog"; +import { useGetUserRole } from "@/admin/hooks/useGetUserRole"; import { ResetPasswordDialog } from "@/admin/modules/user/components/ResetPasswordDialog"; -import { usePatchV2AdminUsersVerifyUUID, usePostAuthReset, usePostV2UsersResend } from "@/generated/apiComponents"; +import { + usePatchV2AdminUsersVerifyUUID, + usePostAuthReset, + usePostAuthSendLoginDetails, + usePostV2UsersResend +} from "@/generated/apiComponents"; import { V2AdminUserRead } from "@/generated/apiSchemas"; import { userPrimaryRoleChoices } from "../const"; @@ -13,6 +29,8 @@ import { userPrimaryRoleChoices } from "../const"; export const UserShowAside = () => { const notify = useNotify(); const refresh = useRefresh(); + const redirect = useRedirect(); + const { isSuperAdmin } = useGetUserRole(); const [showResetPasswordDialog, setShowResetPasswordDialog] = useState(false); const [showVerifyEmailDialog, setShowVerifyEmailDialog] = useState(false); @@ -34,6 +52,13 @@ export const UserShowAside = () => { } }); + const { mutate: sendLoginDetails } = usePostAuthSendLoginDetails({ + onSuccess() { + notify(`Login details email has been sent successfully.`, { type: "success" }); + refresh(); + } + }); + const { mutate: verifyUser } = usePatchV2AdminUsersVerifyUUID({ onSuccess() { notify(`User email has been verified successfully.`, { type: "success" }); @@ -41,6 +66,10 @@ export const UserShowAside = () => { } }); + const handleCreateUser = () => { + redirect("create", "user"); + }; + return ( <>