diff --git a/public/locales/en/translation.json b/public/locales/en/translation.json
index 3507035be4..5bb2baee5d 100644
--- a/public/locales/en/translation.json
+++ b/public/locales/en/translation.json
@@ -103,6 +103,7 @@
},
"siteSettings": {
"projectRoles": "Project roles",
+ "addProjectUsers": "Add project users",
"archiveProjectText": "This project will not be accessible to any users.",
"restoreProjectText": "Somebody probably had a good reason to archive this project. Are you sure you want to restore it?",
"userList": "Users",
diff --git a/src/components/ProjectSettings/ProjectUsers/AddProjectUsers.tsx b/src/components/ProjectSettings/ProjectUsers/AddProjectUsers.tsx
index 86c974cad3..cf68adb9ec 100644
--- a/src/components/ProjectSettings/ProjectUsers/AddProjectUsers.tsx
+++ b/src/components/ProjectSettings/ProjectUsers/AddProjectUsers.tsx
@@ -24,10 +24,14 @@ const customStyles = {
},
};
-export default function AddProjectUsers(): ReactElement {
- const projectId = useAppSelector(
- (state: StoreState) => state.currentProjectState.project.id
- );
+interface AddProjectUsersProps {
+ projectId: string;
+ siteAdmin?: boolean;
+}
+
+export default function AddProjectUsers(
+ props: AddProjectUsersProps
+): ReactElement {
const projectUsers = useAppSelector(
(state: StoreState) => state.currentProjectState.users
);
@@ -42,10 +46,10 @@ export default function AddProjectUsers(): ReactElement {
function addToProject(user: User): void {
if (!projectUsers.map((u) => u.id).includes(user.id)) {
backend
- .addOrUpdateUserRole(projectId, Role.Harvester, user.id)
+ .addOrUpdateUserRole(props.projectId, Role.Harvester, user.id)
.then(() => {
toast.success(t("projectSettings.invite.toastSuccess"));
- dispatch(asyncRefreshProjectUsers(projectId));
+ dispatch(asyncRefreshProjectUsers(props.projectId));
})
.catch((err) => {
console.error(err);
@@ -57,7 +61,11 @@ export default function AddProjectUsers(): ReactElement {
return (
<>
-
+
{RuntimeConfig.getInstance().emailServicesEnabled() && (
diff --git a/src/components/ProjectSettings/ProjectUsers/UserList.tsx b/src/components/ProjectSettings/ProjectUsers/UserList.tsx
index 016ea47940..6b6937fa63 100644
--- a/src/components/ProjectSettings/ProjectUsers/UserList.tsx
+++ b/src/components/ProjectSettings/ProjectUsers/UserList.tsx
@@ -28,8 +28,9 @@ export function doesTextMatchUser(text: string, user: User): boolean {
}
interface UserListProps {
- projectUsers: User[];
addToProject: (user: User) => void;
+ minSearchLength: number;
+ projectUsers: User[];
}
export default function UserList(props: UserListProps): ReactElement {
@@ -68,7 +69,7 @@ export default function UserList(props: UserListProps): ReactElement {
const updateUsers = (text: string): void => {
setFilterInput(text);
- if (text.length >= 3) {
+ if (text.length >= props.minSearchLength) {
const filterUsers = (users: User[]): User[] =>
users.filter((u) => doesTextMatchUser(text, u));
setFilteredNonProjUsers(filterUsers(nonProjUsers));
diff --git a/src/components/ProjectSettings/ProjectUsers/tests/UserList.test.tsx b/src/components/ProjectSettings/ProjectUsers/tests/UserList.test.tsx
index c23ec3fd5f..15612a7ec3 100644
--- a/src/components/ProjectSettings/ProjectUsers/tests/UserList.test.tsx
+++ b/src/components/ProjectSettings/ProjectUsers/tests/UserList.test.tsx
@@ -21,7 +21,11 @@ let testRenderer: renderer.ReactTestRenderer;
const renderUserList = async (users: User[] = []): Promise => {
await renderer.act(async () => {
testRenderer = renderer.create(
-
+
);
});
};
diff --git a/src/components/ProjectSettings/index.tsx b/src/components/ProjectSettings/index.tsx
index 9390e46f3c..f6d82e90d0 100644
--- a/src/components/ProjectSettings/index.tsx
+++ b/src/components/ProjectSettings/index.tsx
@@ -165,7 +165,7 @@ export default function ProjectSettingsComponent() {
}
title={t("projectSettings.user.addUser")}
- body={}
+ body={}
/>
)}
diff --git a/src/components/SiteSettings/ProjectManagement/ProjectUsersButtonWithConfirmation.tsx b/src/components/SiteSettings/ProjectManagement/ProjectUsersButtonWithConfirmation.tsx
index 496dac8303..7f24f52dd0 100644
--- a/src/components/SiteSettings/ProjectManagement/ProjectUsersButtonWithConfirmation.tsx
+++ b/src/components/SiteSettings/ProjectManagement/ProjectUsersButtonWithConfirmation.tsx
@@ -4,13 +4,16 @@ import {
Dialog,
DialogContent,
DialogTitle,
+ Divider,
IconButton,
+ Typography,
} from "@mui/material";
import { useEffect, useState } from "react";
import { useTranslation } from "react-i18next";
import { asyncRefreshProjectUsers } from "components/Project/ProjectActions";
import ActiveProjectUsers from "components/ProjectSettings/ProjectUsers/ActiveProjectUsers";
+import AddProjectUsers from "components/ProjectSettings/ProjectUsers/AddProjectUsers";
import { useAppDispatch } from "types/hooks";
import theme from "types/theme";
@@ -40,7 +43,7 @@ export default function ProjectUsersButtonWithConfirmation(