diff --git a/ui/src/app/admin/component/UserMaintenance.js b/ui/src/app/admin/component/UserMaintenance.js
index 72847104d..bb9faac45 100644
--- a/ui/src/app/admin/component/UserMaintenance.js
+++ b/ui/src/app/admin/component/UserMaintenance.js
@@ -7,7 +7,9 @@ import Button from 'react-bootstrap/Button';
import Translate from '../../i18n/components/translate';
import { useCurrentUser } from '../../core/user/UserContext';
-export default function UserMaintenance({ users, roles, onDeleteUser, onChangeUserRole }) {
+import { GroupsProvider } from '../hoc/GroupsProvider';
+
+export default function UserMaintenance({ users, roles, onDeleteUser, onChangeUserRole, onChangeUserGroup }) {
const currentUser = useCurrentUser();
@@ -20,43 +22,65 @@ export default function UserMaintenance({ users, roles, onDeleteUser, onChangeUs
Name |
Email |
Role |
+ Group |
Delete? |
- {users.map((user, idx) =>
-
- | {user.username} |
- {user.firstName} {user.lastName} |
- {user.emailAddress} |
-
-
-
- |
-
- {currentUser.username !== user.username &&
-
- }
- |
-
- )}
+
+ {(groups, onRemove, loadingGroups) =>
+
+ {users.map((user, idx) =>
+
+ | {user.username} |
+ {user.firstName} {user.lastName} |
+ {user.emailAddress} |
+
+
+
+ |
+
+
+
+ |
+
+ {currentUser.username !== user.username &&
+
+ }
+ |
+
+ )}
+
+ }
+
diff --git a/ui/src/app/admin/container/GroupsList.js b/ui/src/app/admin/container/GroupsList.js
index f0a1146e3..07090f412 100644
--- a/ui/src/app/admin/container/GroupsList.js
+++ b/ui/src/app/admin/container/GroupsList.js
@@ -38,15 +38,19 @@ export function GroupsList({ groups, onDelete }) {
|
- Group Name
+ Group Name
+ |
+
+ Group Description
|
Actions |
- {groups?.length && groups.map((group, i) =>
+ {(groups?.length > 0 ) ? groups.map((group, i) =>
| {group.name} |
+ {group.description} |
@@ -62,7 +66,7 @@ export function GroupsList({ groups, onDelete }) {
|
- )}
+ ) : ''}
diff --git a/ui/src/app/admin/container/UserManagement.js b/ui/src/app/admin/container/UserManagement.js
index e4e1140ef..b8e8e6784 100644
--- a/ui/src/app/admin/container/UserManagement.js
+++ b/ui/src/app/admin/container/UserManagement.js
@@ -38,6 +38,19 @@ export default function UserManagement({ users, children, reload }) {
}
}
+ async function setUserGroupRequest(user, groupId) {
+ await patch(`/admin/users/${user.username}`, {
+ ...user,
+ groupId
+ });
+ if (response.ok && reload) {
+ dispatch(createNotificationAction(
+ `User update successful for ${user.username}.`
+ ));
+ reload();
+ }
+ }
+
async function deleteUserRequest(id) {
await del(`/admin/users/${id}`);
if (response.ok && reload) {
@@ -66,7 +79,7 @@ export default function UserManagement({ users, children, reload }) {
return (
- {children(users, roles, setUserRoleRequest, (id) => setDeleting(id))}
+ {children(users, roles, setUserRoleRequest, setUserGroupRequest, (id) => setDeleting(id))}
setDeleting(null)}>
Delete User?
diff --git a/ui/src/app/admin/hoc/GroupsProvider.js b/ui/src/app/admin/hoc/GroupsProvider.js
index c7243e1fa..256235b05 100644
--- a/ui/src/app/admin/hoc/GroupsProvider.js
+++ b/ui/src/app/admin/hoc/GroupsProvider.js
@@ -1,13 +1,13 @@
import React from 'react';
import { useGroups } from '../hooks';
-export function GroupsProvider({ children }) {
+export function GroupsProvider({ children, cache = 'no-cache' }) {
const [groups, setGroups] = React.useState([]);
- const { get, del, response } = useGroups({
- cachePolicy: 'no-cache'
+ const { get, del, response, loading } = useGroups({
+ cachePolicy: cache
});
async function loadGroups() {
@@ -27,5 +27,5 @@ export function GroupsProvider({ children }) {
/*eslint-disable react-hooks/exhaustive-deps*/
React.useEffect(() => { loadGroups() }, []);
- return (<>{children(groups, removeGroup)}>);
+ return (<>{children(groups, removeGroup, loading)}>);
}
\ No newline at end of file
diff --git a/ui/src/app/admin/hooks.js b/ui/src/app/admin/hooks.js
index 2d2b70610..28aef201a 100644
--- a/ui/src/app/admin/hooks.js
+++ b/ui/src/app/admin/hooks.js
@@ -1,10 +1,8 @@
import useFetch from 'use-http';
import API_BASE_PATH from '../App.constant';
-export function useGroups () {
- return useFetch(`${API_BASE_PATH}/admin/groups`, {
- cachePolicy: 'no-cache'
- });
+export function useGroups (opts = { cachePolicy: 'no-cache' }) {
+ return useFetch(`${API_BASE_PATH}/admin/groups`, opts);
}
export function useGroup(id) {
diff --git a/ui/src/app/dashboard/view/AdminTab.js b/ui/src/app/dashboard/view/AdminTab.js
index a458c810a..268ea61fc 100644
--- a/ui/src/app/dashboard/view/AdminTab.js
+++ b/ui/src/app/dashboard/view/AdminTab.js
@@ -39,8 +39,8 @@ export function AdminTab () {
- {(u, roles, onChangeUserRole, onDeleteUser) =>
- }
+ {(u, roles, onChangeUserRole, onChangeUserGroup, onDeleteUser) =>
+ }