diff --git a/packages/client/src/containers/RetroPage/RetroPage.jsx b/packages/client/src/containers/RetroPage/RetroPage.jsx index c2a620a..8383d73 100644 --- a/packages/client/src/containers/RetroPage/RetroPage.jsx +++ b/packages/client/src/containers/RetroPage/RetroPage.jsx @@ -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'; @@ -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'); } @@ -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 () => { @@ -97,6 +138,13 @@ function RetroPage() { } }; + const renderTeamMembers = (members) => + members.map((member) => ( + + )); + return (
@@ -139,17 +187,13 @@ function RetroPage() {
{ const answers = body.map((memberAnswer) => ({ retro_id: routeParams.retroId, question_id: memberAnswer.questionId, - answer: memberAnswer.answer, + answer: memberAnswer.text, team_member_id: memberAnswer.teamMemberId, })); diff --git a/packages/server/api/controllers/teamsController.js b/packages/server/api/controllers/teamsController.js index 04cebb5..5edfbc2 100644 --- a/packages/server/api/controllers/teamsController.js +++ b/packages/server/api/controllers/teamsController.js @@ -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, }; diff --git a/packages/server/api/routes/teams.router.js b/packages/server/api/routes/teams.router.js index 1a7cd73..d3952c9 100644 --- a/packages/server/api/routes/teams.router.js +++ b/packages/server/api/routes/teams.router.js @@ -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;