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) => + }