Skip to content

Commit

Permalink
Merge pull request #33 from HackYourFuture-CPH/feat/develop-complete-…
Browse files Browse the repository at this point in the history
…retro

feat: develop complete retro
  • Loading branch information
komalranjan9 committed Apr 28, 2024
2 parents a85d4a8 + 5c12623 commit 0f33da9
Show file tree
Hide file tree
Showing 4 changed files with 86 additions and 20 deletions.
82 changes: 63 additions & 19 deletions packages/client/src/containers/RetroPage/RetroPage.jsx
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import React, { useState, useContext } from 'react';
import { useNavigate } from 'react-router-dom';
import { useParams } from 'react-router-dom';
import { RetroCodeContext } from '../Contexts/RetroCodeContext';
import { apiURL } from '../../apiURL';
import './RetroPage.css';
Expand All @@ -16,23 +16,40 @@ function RetroPage() {
const [comments, setComments] = useState({});
const [joinCode, setJoinCode] = useState('');
const [inputValues, setInputValues] = useState({});
const [selectedRoles, setSelectedRoles] = useState({});
const [errorMessage, setErrorMessage] = useState('');
const navigate = useNavigate();

const { retroCode, setRetroCode } = useContext(RetroCodeContext);
const [retroId, setRetroId] = useState();
const [teamMembers, setTeamMembers] = useState([]);
const [activeMember, setActiveMember] = useState();
const { teamId } = useParams();

const handleNewRetro = async () => {
const response = await fetch(`${apiURL()}/retro/generateRetroCode`, {
const response = await fetch(`${apiURL()}/retro/`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({
teamId,
title: 'New retro',
}),
});

const teamMembersResponse = await fetch(`${apiURL()}/teams/${teamId}`, {
method: 'GET',
headers: {
'Content-Type': 'application/json',
},
});

if (response.ok) {
const newRetroCode = await response.text();
setRetroCode(newRetroCode);
const results = await response.json();
const teamMembersList = await teamMembersResponse.json();
setRetroCode(results.retroCode);
setSelectedQuestions(questions);
setTeamMembers(teamMembersList.teamMembers);
setRetroId(results.retroId);
} else {
throw new Error('Invalid retro code');
}
Expand All @@ -47,15 +64,39 @@ function RetroPage() {
...prevComments,
[questionId]: [
...(prevComments[questionId] || []),
{ id: newCommentId, text: commentText },
{
id: newCommentId,
text: commentText,
teamMemberId: activeMember,
questionId,
},
],
}));

setInputValues((prevValues) => ({ ...prevValues, [questionId]: '' }));
};

const handleComplete = () => {
navigate('/joinretro');
const handleComplete = async () => {
const payload = Object.values(comments).reduce(
(answersArray, commentsArray) => {
answersArray.push(...commentsArray);
return answersArray;
},
[],
);

const response = await fetch(`${apiURL()}/retro/${retroId}/complete`, {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(payload),
});

if (response.ok) {
// eslint-disable-next-line no-alert
alert('Retro is completed');
}
};

const handleJoin = async () => {
Expand Down Expand Up @@ -97,6 +138,13 @@ function RetroPage() {
}
};

const renderTeamMembers = (members) =>
members.map((member) => (
<option key={member.id} value={member.id}>
{member.first_name} {member.last_name}
</option>
));

return (
<div>
<div className="retroContainer">
Expand Down Expand Up @@ -139,17 +187,13 @@ function RetroPage() {
<div className="commentInputContainer">
<select
className="roleSelect"
value={selectedRoles[question.id] || ''}
onChange={(e) =>
setSelectedRoles((prevRoles) => ({
...prevRoles,
[question.id]: e.target.value,
}))
}
value={activeMember}
onChange={(e) => {
setActiveMember(e.target.value);
}}
>
<option value="">Select role</option>
<option value="teamMember">Team Member</option>
<option value="teamLeader">Team Leader</option>
<option value="">Select member</option>
{renderTeamMembers(teamMembers)}
</select>
<input
type="text"
Expand Down
2 changes: 1 addition & 1 deletion packages/server/api/controllers/retroController.js
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ const completeRetro = async (routeParams, body) => {
const answers = body.map((memberAnswer) => ({
retro_id: routeParams.retroId,
question_id: memberAnswer.questionId,
answer: memberAnswer.answer,
answer: memberAnswer.text,
team_member_id: memberAnswer.teamMemberId,
}));

Expand Down
15 changes: 15 additions & 0 deletions packages/server/api/controllers/teamsController.js
Original file line number Diff line number Diff line change
Expand Up @@ -61,7 +61,22 @@ const validateTeamCode = async (body) => {
return results[0];
};

const getTeamMembers = async (params) => {
const { teamId } = params;

const results = await knex.raw(`
select \`Employees\`.first_name, \`Employees\`.last_name, \`TeamMembers\`.id from \`Employees\`
inner join \`TeamMembers\` on \`TeamMembers\`.employee_id = \`Employees\`.id
where \`TeamMembers\`.team_id = ${Number(teamId)}
`);

return {
teamMembers: results[0],
};
};

module.exports = {
createTeam,
validateTeamCode,
getTeamMembers,
};
7 changes: 7 additions & 0 deletions packages/server/api/routes/teams.router.js
Original file line number Diff line number Diff line change
Expand Up @@ -17,4 +17,11 @@ router.post('/validateTeamCode', (req, res, next) => {
.catch(next);
});

router.get('/:teamId', (req, res, next) => {
teamsController
.getTeamMembers(req.params)
.then((result) => res.json(result))
.catch(next);
});

module.exports = router;

0 comments on commit 0f33da9

Please sign in to comment.