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 (
<>