Skip to content

Commit 4432171

Browse files
committed
Merge branch 'feature-2474/self-review-notifications' of github.com:objectcomputing/check-ins into feature-2474/self-review-notifications
2 parents 4c76421 + ed9a72c commit 4432171

File tree

9 files changed

+217
-18
lines changed

9 files changed

+217
-18
lines changed

server/src/main/resources/db/dev/R__Load_testing_data.sql

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1291,7 +1291,7 @@ VALUES
12911291
INSERT INTO review_periods
12921292
(id, name, review_status, review_template_id, self_review_template_id, launch_date, self_review_close_date, close_date, period_start_date, period_end_date)
12931293
VALUES
1294-
('12345678-e29c-4cf4-9ea4-6baa09405c57', 'Review Period 1', 'OPEN', 'd1e94b60-47c4-4945-87d1-4dc88f088e57', '926a37a4-4ded-4633-8900-715b0383aecc', '2024-09-01', '2024-09-02', '2024-09-03', '2024-01-01', '2024-12-31');
1294+
('12345678-e29c-4cf4-9ea4-6baa09405c57', 'Review Period 1', 'PLANNING', 'd1e94b60-47c4-4945-87d1-4dc88f088e57', '926a37a4-4ded-4633-8900-715b0383aecc', '2024-09-01', '2024-09-02', '2024-09-03', '2024-01-01', '2024-12-31');
12951295

12961296
INSERT INTO review_periods
12971297
(id, name, review_status, review_template_id, self_review_template_id, launch_date, self_review_close_date, close_date, period_start_date, period_end_date)
@@ -1302,18 +1302,18 @@ VALUES
13021302
INSERT INTO feedback_requests
13031303
(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status, review_period_id)
13041304
VALUES
1305-
('98390c09-7121-110a-bfee-9380a470a7ef', '72655c4f-1fb8-4514-b31e-7f7e19fa9bd7', 'c7406157-a38f-4d48-aaed-04018d846727', 'c7406157-a38f-4d48-aaed-04018d846727', '926a37a4-4ded-4633-8900-715b0383aecc', '2024-09-04', '2024-09-30', '2024-09-05', 'sent', '12345678-e29c-4cf4-9ea4-6baa09405c57');
1305+
('98390c09-7121-110a-bfee-9380a470a7ef', '72655c4f-1fb8-4514-b31e-7f7e19fa9bd7', 'c7406157-a38f-4d48-aaed-04018d846727', 'c7406157-a38f-4d48-aaed-04018d846727', '926a37a4-4ded-4633-8900-715b0383aecc', '2024-09-04', '2024-09-30', '2024-09-05', 'submitted', '12345678-e29c-4cf4-9ea4-6baa09405c57');
13061306

13071307
-- CAE - Review feedback request, Creator: Big Boss
13081308
INSERT INTO feedback_requests
13091309
(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status, review_period_id)
13101310
VALUES
1311-
('98390c09-7121-110a-bfee-9380a470a7f0', '72655c4f-1fb8-4514-b31e-7f7e19fa9bd7', 'c7406157-a38f-4d48-aaed-04018d846727', '6207b3fd-042d-49aa-9e28-dcc04f537c2d', 'd1e94b60-47c4-4945-87d1-4dc88f088e57', '2024-09-04', '2024-09-30', '2024-09-05', 'sent', '12345678-e29c-4cf4-9ea4-6baa09405c57');
1311+
('98390c09-7121-110a-bfee-9380a470a7f0', '72655c4f-1fb8-4514-b31e-7f7e19fa9bd7', 'c7406157-a38f-4d48-aaed-04018d846727', '6207b3fd-042d-49aa-9e28-dcc04f537c2d', 'd1e94b60-47c4-4945-87d1-4dc88f088e57', '2024-09-04', '2024-09-30', '2024-09-05', 'submitted', '12345678-e29c-4cf4-9ea4-6baa09405c57');
13121312

13131313
INSERT INTO feedback_requests
13141314
(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status, review_period_id)
13151315
VALUES
1316-
('98390c09-7121-110a-bfee-9380a470a7f3', '72655c4f-1fb8-4514-b31e-7f7e19fa9bd7', 'c7406157-a38f-4d48-aaed-04018d846727', 'dfe2f986-fac0-11eb-9a03-0242ac130003', 'd1e94b60-47c4-4945-87d1-4dc88f088e57', '2024-09-04', '2024-09-30', '2024-09-05', 'sent', '12345678-e29c-4cf4-9ea4-6baa09405c57');
1316+
('98390c09-7121-110a-bfee-9380a470a7f3', '72655c4f-1fb8-4514-b31e-7f7e19fa9bd7', 'c7406157-a38f-4d48-aaed-04018d846727', 'dfe2f986-fac0-11eb-9a03-0242ac130003', 'd1e94b60-47c4-4945-87d1-4dc88f088e57', '2024-09-04', '2024-09-30', '2024-09-05', 'submitted', '12345678-e29c-4cf4-9ea4-6baa09405c57');
13171317

13181318
INSERT INTO feedback_requests
13191319
(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status, review_period_id)
@@ -1339,12 +1339,12 @@ VALUES
13391339
INSERT INTO feedback_requests
13401340
(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status, review_period_id)
13411341
VALUES
1342-
('98390c09-7121-110a-bfee-9380a470a7f1', '72655c4f-1fb8-4514-b31e-7f7e19fa9bd7', 'c7406157-a38f-4d48-aaed-04018d846727', '6207b3fd-042d-49aa-9e28-dcc04f537c2d', '1c8bc142-c447-4889-986e-42ab177da683', '2024-09-04', '2024-09-30', '2024-09-05', 'sent', '12345678-e29c-4cf4-9ea4-6baa09405c57');
1342+
('98390c09-7121-110a-bfee-9380a470a7f1', '72655c4f-1fb8-4514-b31e-7f7e19fa9bd7', 'c7406157-a38f-4d48-aaed-04018d846727', '6207b3fd-042d-49aa-9e28-dcc04f537c2d', '1c8bc142-c447-4889-986e-42ab177da683', '2024-09-04', '2024-09-30', '2024-09-05', 'submitted', '12345678-e29c-4cf4-9ea4-6baa09405c57');
13431343

13441344
INSERT INTO feedback_requests
13451345
(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status, review_period_id)
13461346
VALUES
1347-
('98390c09-7121-110a-bfee-9380a470a7f2', '72655c4f-1fb8-4514-b31e-7f7e19fa9bd7', 'c7406157-a38f-4d48-aaed-04018d846727', 'dfe2f986-fac0-11eb-9a03-0242ac130003', '1c8bc142-c447-4889-986e-42ab177da683', '2024-09-04', '2024-09-30', '2024-09-05', 'sent', '12345678-e29c-4cf4-9ea4-6baa09405c57');
1347+
('98390c09-7121-110a-bfee-9380a470a7f2', '72655c4f-1fb8-4514-b31e-7f7e19fa9bd7', 'c7406157-a38f-4d48-aaed-04018d846727', 'dfe2f986-fac0-11eb-9a03-0242ac130003', '1c8bc142-c447-4889-986e-42ab177da683', '2024-09-04', '2024-09-30', '2024-09-05', 'submitted', '12345678-e29c-4cf4-9ea4-6baa09405c57');
13481348

13491349
---- Creator: Big Boss
13501350
INSERT INTO feedback_requests
@@ -1366,17 +1366,17 @@ VALUES
13661366
INSERT INTO feedback_requests
13671367
(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) -- requestee: Faux Freddy, recipient: Unreal Ulysses
13681368
VALUES
1369-
('0d0d872d-4f05-4af8-9804-d0a99e450c37', 'dfe2f986-fac0-11eb-9a03-0242ac130003', '2dee821c-de32-4d9c-9ecb-f73e5903d17a', 'dfe2f986-fac0-11eb-9a03-0242ac130003','18ef2032-c264-411e-a8e1-ddda9a714bae', '2022-03-01', '2023-08-05', '2022-04-01', 'sent');
1369+
('0d0d872d-4f05-4af8-9804-d0a99e450c37', 'dfe2f986-fac0-11eb-9a03-0242ac130003', '2dee821c-de32-4d9c-9ecb-f73e5903d17a', 'dfe2f986-fac0-11eb-9a03-0242ac130003','18ef2032-c264-411e-a8e1-ddda9a714bae', '2022-03-01', '2023-08-05', '2022-04-01', 'submitted');
13701370

13711371
INSERT INTO feedback_requests
13721372
(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) -- requestee: Faux Freddy, recipient: Unreal Ulysses
13731373
VALUES
1374-
('1aff4993-2324-41cc-8b21-2ab5715ca70b', 'dfe2f986-fac0-11eb-9a03-0242ac130003', '2dee821c-de32-4d9c-9ecb-f73e5903d17a', 'dfe2f986-fac0-11eb-9a03-0242ac130003','18ef2032-c264-411e-a8e1-ddda9a714bae', '2022-03-01', '2023-08-05', '2022-04-01', 'sent');
1374+
('1aff4993-2324-41cc-8b21-2ab5715ca70b', 'dfe2f986-fac0-11eb-9a03-0242ac130003', '2dee821c-de32-4d9c-9ecb-f73e5903d17a', 'dfe2f986-fac0-11eb-9a03-0242ac130003','18ef2032-c264-411e-a8e1-ddda9a714bae', '2022-03-01', '2023-08-05', '2022-04-01', 'submitted');
13751375

13761376
INSERT INTO feedback_requests
13771377
(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) -- requestee: Faux Freddy, recipient: Unreal Ulysses
13781378
VALUES
1379-
('7ca4d402-0bb9-4989-9087-8a52a63ee5d0', 'dfe2f986-fac0-11eb-9a03-0242ac130003', '2dee821c-de32-4d9c-9ecb-f73e5903d17a', 'dfe2f986-fac0-11eb-9a03-0242ac130003','18ef2032-c264-411e-a8e1-ddda9a714bae', '2022-03-01', '2023-08-05', '2022-04-01', 'sent');
1379+
('7ca4d402-0bb9-4989-9087-8a52a63ee5d0', 'dfe2f986-fac0-11eb-9a03-0242ac130003', '2dee821c-de32-4d9c-9ecb-f73e5903d17a', 'dfe2f986-fac0-11eb-9a03-0242ac130003','18ef2032-c264-411e-a8e1-ddda9a714bae', '2022-03-01', '2023-08-05', '2022-04-01', 'submitted');
13801380

13811381

13821382
-- Feedback Requests with responses
@@ -1416,7 +1416,7 @@ VALUES
14161416
INSERT INTO feedback_requests
14171417
(id, creator_id, requestee_id, recipient_id, template_id, send_date, due_date, submit_date, status) -- requestee: Faux Freddy, recipient: Unreal Ulysses
14181418
VALUES
1419-
('74623897-5279-4dbe-94d4-5a247d9f00b1', 'dfe2f986-fac0-11eb-9a03-0242ac130003', '2dee821c-de32-4d9c-9ecb-f73e5903d17a', 'dfe2f986-fac0-11eb-9a03-0242ac130003','18ef2032-c264-411e-a8e1-ddda9a714bae', '2022-03-01', '2023-08-05', '2022-04-01', 'sent');
1419+
('74623897-5279-4dbe-94d4-5a247d9f00b1', 'dfe2f986-fac0-11eb-9a03-0242ac130003', '2dee821c-de32-4d9c-9ecb-f73e5903d17a', 'dfe2f986-fac0-11eb-9a03-0242ac130003','18ef2032-c264-411e-a8e1-ddda9a714bae', '2022-03-01', '2023-08-05', '2022-04-01', 'submitted');
14201420

14211421
INSERT INTO feedback_answers
14221422
(id, answer, question_id, request_id, sentiment)

web-ui/src/api/certification.js

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
import { resolve } from './api.js';
2+
3+
const certificationUrl = '/services/certification';
4+
5+
export const getCertifications = async cookie => {
6+
return resolve({
7+
url: certificationUrl,
8+
headers: { 'X-CSRF-Header': cookie, Accept: 'application/json' }
9+
});
10+
};
11+
12+
export const getCertification = async (id, cookie) => {
13+
return resolve({
14+
url: `${certificationUrl}/${id}`,
15+
headers: { 'X-CSRF-Header': cookie, Accept: 'application/json' }
16+
});
17+
};
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
.earned-certification-badges {
2+
img {
3+
max-height: 5rem;
4+
}
5+
6+
.MuiCardContent-root {
7+
display: flex;
8+
gap: 1rem;
9+
}
10+
}
Lines changed: 142 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,142 @@
1+
import PropTypes from 'prop-types';
2+
import React, { useCallback, useContext, useEffect, useState } from 'react';
3+
4+
import {Card, CardContent, CardHeader, Chip, Tooltip} from '@mui/material';
5+
6+
import { resolve } from '../../api/api.js';
7+
import { AppContext } from '../../context/AppContext';
8+
import { selectCsrfToken } from '../../context/selectors';
9+
10+
import './EarnedCertificationBadges.css';
11+
import certifications from "../certifications/Certifications.jsx";
12+
13+
const earnedCertificationBaseUrl = '/services/earned-certification';
14+
15+
const propTypes = {
16+
memberId: PropTypes.string, certifications: PropTypes.array,
17+
};
18+
const EarnedCertificationBadges = ({ memberId, certifications }) => {
19+
const [earnedCertifications, setEarnedCertifications] = useState([]);
20+
21+
const { state } = useContext(AppContext);
22+
const csrf = selectCsrfToken(state);
23+
24+
const loadCertifications = useCallback(async () => {
25+
const res = await resolve({
26+
method: 'GET',
27+
url: earnedCertificationBaseUrl + '?memberId=' + memberId,
28+
headers: {
29+
'X-CSRF-Header': csrf,
30+
Accept: 'application/json',
31+
'Content-Type': 'application/json;charset=UTF-8'
32+
}
33+
});
34+
if (res.error) return;
35+
36+
const certifications = res.payload.data;
37+
setEarnedCertifications(certifications);
38+
}, [csrf]);
39+
40+
useEffect(() => {
41+
if (csrf) loadCertifications();
42+
}, [csrf]);
43+
44+
if (earnedCertifications.length === 0 || !certifications) return null;
45+
return (
46+
<Card className="earned-certification-badges">
47+
<CardHeader
48+
title="Earned Certifications"
49+
titleTypographyProps={{ variant: 'h5', component: 'h1' }}
50+
/>
51+
<CardContent>
52+
{earnedCertifications.map(earnedCert => {
53+
// Find the corresponding certification using earnedCert.certificationId
54+
const cert = certifications.find(c => c.id === earnedCert.certificationId);
55+
// If no matching cert is found, skip rendering for that earnedCert
56+
if (!cert) return null;
57+
if (cert.badgeUrl && cert.badgeUrl.trim().length > 0) {
58+
return (
59+
<Tooltip
60+
key={earnedCert.id}
61+
title={
62+
<>
63+
{cert.name} <br />
64+
Issued on: {earnedCert.earnedDate} <br />
65+
Expires on: {earnedCert.expirationDate}
66+
</>
67+
}
68+
>
69+
{earnedCert.validationUrl ? (
70+
<a href={earnedCert.validationUrl} target="_blank" rel="noopener noreferrer">
71+
<img
72+
alt={`${cert.name}, Issued on: ${earnedCert.earnedDate}, Expires on: ${earnedCert.expirationDate}`}
73+
src={cert.badgeUrl}
74+
/>
75+
</a>
76+
) : (
77+
<img
78+
alt={`${cert.name}, Issued on: ${earnedCert.earnedDate}, Expires on: ${earnedCert.expirationDate}`}
79+
src={cert.badgeUrl}
80+
/>
81+
)}
82+
</Tooltip>
83+
);
84+
} else {
85+
return (
86+
<>
87+
{earnedCert.validationUrl ? (
88+
<a href={earnedCert.validationUrl} target="_blank" rel="noopener noreferrer" style={{ textDecoration: 'none' }}>
89+
<Chip
90+
sx={{
91+
height: 'auto',
92+
'& .MuiChip-label': {
93+
display: 'block',
94+
whiteSpace: 'normal',
95+
},
96+
}}
97+
className="chip"
98+
color="primary"
99+
key={earnedCert.id}
100+
label={
101+
<>
102+
{cert.name} <br />
103+
Issued on: {earnedCert.earnedDate}<br />
104+
Expires on: {earnedCert.expirationDate}
105+
</>
106+
}
107+
/>
108+
</a>
109+
) : (
110+
<Chip
111+
sx={{
112+
height: 'auto',
113+
'& .MuiChip-label': {
114+
display: 'block',
115+
whiteSpace: 'normal',
116+
},
117+
}}
118+
className="chip"
119+
color="primary"
120+
key={earnedCert.id}
121+
label={
122+
<>
123+
{cert.name} <br />
124+
Issued on: {earnedCert.earnedDate}<br />
125+
Expires on: {earnedCert.expirationDate}
126+
</>
127+
}
128+
/>
129+
)}
130+
</>
131+
);
132+
}
133+
})}
134+
</CardContent>
135+
</Card>
136+
);
137+
138+
};
139+
140+
EarnedCertificationBadges.propTypes = propTypes;
141+
142+
export default EarnedCertificationBadges;

web-ui/src/components/reviews/TeamReviews.jsx

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -257,7 +257,8 @@ const TeamReviews = ({ onBack, periodId }) => {
257257
// Now that teamMembers has been updated, we need to make sure that the
258258
// assignments reflects the set of team members.
259259
const ids = teamMembers.map(m => m.id);
260-
setAssignments(assignments.filter(a => a.revieweeId && ids.includes(a.revieweeId)));
260+
const newAssignments = assignments.filter(a => a.revieweeId && ids.includes(a.revieweeId));
261+
setAssignments(newAssignments);
261262
};
262263

263264
const addAssignmentForMemberWithNone = async (members) => {
@@ -268,6 +269,9 @@ const TeamReviews = ({ onBack, periodId }) => {
268269
if (!!!exists && member.supervisorid) {
269270
const reviewers = [{ id: member.supervisorid }];
270271
updateReviewers(member, reviewers);
272+
} else if (!!!exists && !!!member.supervisorid) {
273+
const reviewers = [{ id: null }];
274+
updateReviewers(member, reviewers);
271275
}
272276
});
273277
}
@@ -762,13 +766,11 @@ const TeamReviews = ({ onBack, periodId }) => {
762766
const recipientProfile = selectProfile(state, request?.recipientId);
763767
const manages = recipientProfile?.id === currentUser?.id ||
764768
recipientProfile?.supervisorid === currentUser?.id;
765-
766-
const submitted = request?.status == 'submitted';
767769
const selfSubmitted = selfReviewRequest?.status == 'submitted';
768-
if (manages && (submitted || selfSubmitted)) {
770+
if (manages) {
769771
let separator = '?';
770772
url = "/feedback/submit";
771-
if (submitted) {
773+
if (request) {
772774
url += `${separator}request=${request.id}`;
773775
separator = '&';
774776
}

web-ui/src/context/AppContext.jsx

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
UPDATE_MEMBER_PROFILES,
1212
UPDATE_TERMINATED_MEMBERS,
1313
UPDATE_SKILLS,
14+
UPDATE_CERTIFICATIONS,
1415
UPDATE_TEAMS,
1516
UPDATE_PEOPLE_LOADING,
1617
UPDATE_TEAMS_LOADING
@@ -26,6 +27,7 @@ import { BASE_API_URL } from '../api/api';
2627
import { getAllGuilds } from '../api/guild';
2728
import { getSkills } from '../api/skill';
2829
import { getAllTeams } from '../api/team';
30+
import {getCertifications} from "../api/certification.js";
2931

3032
const AppContext = React.createContext();
3133

@@ -51,6 +53,7 @@ const AppContextProvider = props => {
5153
memberProfiles,
5254
checkins,
5355
skills,
56+
certifications,
5457
roles,
5558
userRoles
5659
} = state;
@@ -214,6 +217,26 @@ const AppContextProvider = props => {
214217
}
215218
}, [csrf, skills]);
216219

220+
useEffect(() => {
221+
const getAllCertifications = async () => {
222+
const res = await getCertifications(csrf);
223+
const data =
224+
res &&
225+
res.payload &&
226+
res.payload.data &&
227+
res.payload.status === 200 &&
228+
!res.error
229+
? res.payload.data
230+
: null;
231+
if (data && data.length > 0) {
232+
dispatch({ type: UPDATE_CERTIFICATIONS, payload: data });
233+
}
234+
};
235+
if (csrf && !certifications) {
236+
getAllCertifications();
237+
}
238+
}, [csrf, certifications]);
239+
217240
useEffect(() => {
218241
const getRoles = async () => {
219242
const res = await getAllRoles(csrf);

web-ui/src/context/actions.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,7 @@ export const UPDATE_MEMBER_SKILLS = '@@check-ins/update_member_skills';
2222
export const ADD_ROLE = '@@check-ins/add_role';
2323
export const UPDATE_SKILL = '@@check-ins/update_skill';
2424
export const UPDATE_SKILLS = '@@check-ins/update_skills';
25+
export const UPDATE_CERTIFICATIONS = '@@check-ins/update_certifications';
2526
export const UPDATE_TEAM_MEMBERS = '@@check-ins/update_team_members';
2627
export const UPDATE_TEAMS = '@@check-ins/update_teams';
2728
export const UPDATE_TERMINATED_MEMBERS =

web-ui/src/context/reducer.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import {
2020
UPDATE_MEMBER_SKILLS,
2121
UPDATE_SKILL,
2222
UPDATE_SKILLS,
23+
UPDATE_CERTIFICATIONS,
2324
UPDATE_GUILD,
2425
UPDATE_GUILDS,
2526
ADD_ROLE,
@@ -113,6 +114,9 @@ export const reducer = (state, action) => {
113114
case UPDATE_SKILLS:
114115
state.skills = action.payload;
115116
break;
117+
case UPDATE_CERTIFICATIONS:
118+
state.certifications = action.payload;
119+
break;
116120
case SET_CSRF:
117121
state.csrf = action.payload;
118122
break;

web-ui/src/pages/MemberProfilePage.jsx

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,11 +16,11 @@ import { getTeamByMember } from '../api/team';
1616
import { getGuildsForMember } from '../api/guild';
1717
import { getAvatarURL } from '../api/api.js';
1818
import ProfilePage from './ProfilePage';
19-
import CertificationBadges from '../components/certifications/CertificationBadges';
2019
import VolunteerBadges from '../components/volunteer/VolunteerBadges';
2120
import { levelList } from '../context/util';
2221
import StarIcon from '@mui/icons-material/Star';
2322
import KudosDialog from '../components/kudos_dialog/KudosDialog';
23+
import EarnedCertificationBadges from "../components/earned-certifications/EarnedCertificationBadges.jsx";
2424

2525
import {
2626
Avatar,
@@ -40,7 +40,7 @@ import './MemberProfilePage.css';
4040
const MemberProfilePage = () => {
4141
const { state } = useContext(AppContext);
4242
const history = useHistory();
43-
const { csrf, skills, userProfile } = state;
43+
const { csrf, skills, certifications, userProfile } = state;
4444
const { memberId } = useParams();
4545
const [selectedMember, setSelectedMember] = useState(null);
4646
const [kudosDialogOpen, setKudosDialogOpen] = useState(false);
@@ -330,7 +330,7 @@ const MemberProfilePage = () => {
330330
</div>
331331
</CardContent>
332332
</Card>
333-
<CertificationBadges memberId={memberId} />
333+
<EarnedCertificationBadges memberId={memberId} certifications={certifications} />
334334
<VolunteerBadges memberId={memberId} />
335335
</Grid>
336336
</Grid>

0 commit comments

Comments
 (0)