diff --git a/server/build.gradle b/server/build.gradle
index 4aa56e47b2..b98fc730da 100755
--- a/server/build.gradle
+++ b/server/build.gradle
@@ -7,7 +7,7 @@ plugins {
id "jacoco"
}
-version "0.8.15"
+version "0.8.16"
group "com.objectcomputing.checkins"
repositories {
@@ -63,7 +63,7 @@ configurations {
}
dependencies {
- runtimeOnly("org.flywaydb:flyway-database-postgresql")
+ runtimeOnly("org.flywaydb:flyway-database-postgresql:11.3.4")
runtimeOnly("org.yaml:snakeyaml")
runtimeOnly("ch.qos.logback:logback-classic")
runtimeOnly("org.postgresql:postgresql")
diff --git a/web-ui/package.json b/web-ui/package.json
index 1f396ae4e2..9478e75642 100644
--- a/web-ui/package.json
+++ b/web-ui/package.json
@@ -1,6 +1,6 @@
{
"name": "web-ui",
- "version": "0.8.15",
+ "version": "0.8.16",
"private": true,
"type": "module",
"dependencies": {
@@ -20,7 +20,7 @@
"@mui/styles": "^5.15.14",
"@mui/x-date-pickers": "^7.3.1",
"@tinymce/tinymce-react": "^5.0.0",
- "axios": "^1.7.4",
+ "axios": "^1.8.2",
"canvas-confetti": "^1.6.0",
"date-fns": "^2.24.0",
"dayjs": "^1.11.11",
diff --git a/web-ui/src/api/roles.js b/web-ui/src/api/roles.js
index 3af15f2b85..f5d4e4654d 100644
--- a/web-ui/src/api/roles.js
+++ b/web-ui/src/api/roles.js
@@ -9,14 +9,14 @@ export const getAllRoles = async cookie => {
});
};
-export const getAllUserRoles = async cookie => {
+export const getAllMemberRoles = async cookie => {
return resolve({
url: roleURL + '/members',
headers: { 'X-CSRF-Header': cookie, Accept: 'application/json' }
});
};
-export const removeUserFromRole = async (roleId, memberId, cookie) => {
+export const removeMemberFromRole = async (roleId, memberId, cookie) => {
return resolve({
method: 'DELETE',
url: roleURL + `/members/${roleId}/${memberId}`,
@@ -28,7 +28,7 @@ export const removeUserFromRole = async (roleId, memberId, cookie) => {
});
};
-export const addUserToRole = async (roleId, memberId, cookie) => {
+export const addMemberToRole = async (roleId, memberId, cookie) => {
return resolve({
method: 'POST',
url: roleURL + '/members',
diff --git a/web-ui/src/components/action_item/ActionItemsPanel.test.jsx b/web-ui/src/components/action_item/ActionItemsPanel.test.jsx
index 5f00dcf947..af97d1650d 100644
--- a/web-ui/src/components/action_item/ActionItemsPanel.test.jsx
+++ b/web-ui/src/components/action_item/ActionItemsPanel.test.jsx
@@ -29,7 +29,7 @@ const initialState = {
teams: [],
skills: [],
roles: [],
- userRoles: [],
+ memberRoles: [],
memberSkills: [],
memberProfiles: []
}
diff --git a/web-ui/src/components/admin/roles/Roles.jsx b/web-ui/src/components/admin/roles/Roles.jsx
index 3145163270..1f3865581f 100644
--- a/web-ui/src/components/admin/roles/Roles.jsx
+++ b/web-ui/src/components/admin/roles/Roles.jsx
@@ -3,18 +3,18 @@ import React, { useContext, useEffect, useState } from 'react';
import { AppContext } from '../../../context/AppContext';
import {
SET_ROLES,
- SET_USER_ROLES,
+ SET_MEMBER_ROLES,
UPDATE_TOAST
} from '../../../context/actions';
import {
- addUserToRole,
+ addMemberToRole,
addNewRole,
- removeUserFromRole,
+ removeMemberFromRole,
updateRole
} from '../../../api/roles';
import {
selectCanEditMemberRolesPermission,
- noPermission,
+ noPermission, selectMemberRoles, selectCsrfToken, selectRoles, selectMemberProfiles,
} from '../../../context/selectors';
import RoleUserCards from './RoleUserCards';
@@ -52,8 +52,11 @@ import './Roles.css';
const Roles = () => {
const { state, dispatch } = useContext(AppContext);
- // roles here is all possible roles, not the selected roles.
- const { csrf, memberProfiles, roles, userRoles } = state;
+
+ const csrf = selectCsrfToken(state);
+ const memberProfiles = selectMemberProfiles(state);
+ const roles = selectRoles(state); // all possible roles, not the selected roles.
+ const memberRoles = selectMemberRoles(state);
const [showAddUser, setShowAddUser] = useState(false);
const [showEditRole, setShowEditRole] = useState(false);
@@ -97,25 +100,25 @@ const Roles = () => {
}
const newRoleToMemberMap = {};
- for (const userRole of userRoles || []) {
+ for (const memberRole of memberRoles || []) {
const role = roles.find(
- role => role.id === userRole?.memberRoleId?.roleId
+ role => role.id === memberRole?.memberRoleId?.roleId
);
if (role) {
let memberList = newRoleToMemberMap[role.role];
if (!memberList) {
memberList = newRoleToMemberMap[role.role] = [];
}
- if (memberMap[userRole?.memberRoleId?.memberId] !== undefined) {
+ if (memberMap[memberRole?.memberRoleId?.memberId] !== undefined) {
memberList.push({
- ...memberMap[userRole?.memberRoleId?.memberId],
+ ...memberMap[memberRole?.memberRoleId?.memberId],
roleId: role.id
});
}
}
}
setRoleToMemberMap(newRoleToMemberMap);
- }, [userRoles, memberProfiles, roles]);
+ }, [memberRoles, memberProfiles, roles]);
const getRoleStats = role => {
let members = roleToMemberMap[role];
@@ -125,20 +128,20 @@ const Roles = () => {
const removeFromRole = async (member, role) => {
const members = roleToMemberMap[role];
const { roleId } = members.find(m => member.id === m.id);
- let res = await removeUserFromRole(roleId, member.id, csrf);
+ let res = await removeMemberFromRole(roleId, member.id, csrf);
let data =
res.payload && res.payload.status === 200 && !res.error
? res.payload
: null;
if (data) {
// TODO: Remove role from map....
- const filtered = userRoles.filter(
- userRole =>
- userRole?.memberRoleId?.roleId !== roleId ||
- userRole?.memberRoleId?.memberId !== member.id
+ const filtered = memberRoles.filter(
+ memberRole =>
+ memberRole?.memberRoleId?.roleId !== roleId ||
+ memberRole?.memberRoleId?.memberId !== member.id
);
dispatch({
- type: SET_USER_ROLES,
+ type: SET_MEMBER_ROLES,
payload: filtered
});
window.snackDispatch({
@@ -153,14 +156,14 @@ const Roles = () => {
const addToRole = async member => {
const role = roles.find(role => role.role === currentRole.role);
- let res = await addUserToRole(role.id, member.id, csrf);
+ let res = await addMemberToRole(role.id, member.id, csrf);
let data =
res.payload && res.payload.data && !res.error ? res.payload.data : null;
if (data) {
setShowAddUser(false);
dispatch({
- type: SET_USER_ROLES,
- payload: [...userRoles, data]
+ type: SET_MEMBER_ROLES,
+ payload: [...memberRoles, data]
});
window.snackDispatch({
type: UPDATE_TOAST,
diff --git a/web-ui/src/components/admin/roles/Roles.test.jsx b/web-ui/src/components/admin/roles/Roles.test.jsx
index 8f90beddc5..d36cab40e4 100644
--- a/web-ui/src/components/admin/roles/Roles.test.jsx
+++ b/web-ui/src/components/admin/roles/Roles.test.jsx
@@ -9,18 +9,49 @@ const initialState = {
{ id: 2, name: 'Señora Test' },
{ id: 3, name: 'Herr Test' }
],
+ memberRoles: [
+ { memberRoleId: { roleId: 1, memberId: 1 } },
+ { memberRoleId: { roleId: 2, memberId: 2 } },
+ ],
roles: [
- { id: 1, role: 'ADMIN', memberid: 1 },
- { id: 2, role: 'PDL', memberid: 2 }
+ { id: 1, role: 'ADMIN', description: 'Administrator' },
+ { id: 2, role: 'PDL', description: 'Prof. Dev. Lead' },
+ { id: 3, role: 'MEMBER', description: 'A member of the org' }
],
userProfile: {
name: 'Current User',
role: ['MEMBER'],
+ id: 1,
permissions: [{ permission: 'CAN_EDIT_MEMBER_ROLES' }],
},
}
};
+const noPermState = {
+ state: {
+ memberProfiles: [
+ { id: 1, name: 'Señior Test' },
+ { id: 2, name: 'Señora Test' },
+ { id: 3, name: 'Herr Test' }
+ ],
+ memberRoles: [
+ { memberRoleId: { roleId: 1, memberId: 1 } },
+ { memberRoleId: { roleId: 2, memberId: 2 } },
+ ],
+ roles: [
+ { id: 1, role: 'ADMIN', description: 'Administrator' },
+ { id: 2, role: 'PDL', description: 'Prof. Dev. Lead' },
+ { id: 3, role: 'MEMBER', description: 'A member of the org' }
+ ],
+ userProfile: {
+ name: 'Current User',
+ role: ['MEMBER'],
+ id: 1,
+ permissions: [],
+ },
+ }
+};
+
it('renders correctly', () => {
snapshot(
+ My worksheet +
++ My PDL description +
+ My worksheet +