Skip to content

Commit b477a7f

Browse files
committed
2024-11-18 - cleanup submit page for ext-recip
1 parent cd41d4e commit b477a7f

File tree

6 files changed

+247
-262
lines changed

6 files changed

+247
-262
lines changed

server/src/main/java/com/objectcomputing/checkins/services/feedback_request/FeedbackRequestExternalRecipientController.java

Lines changed: 78 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import com.objectcomputing.checkins.exceptions.BadArgException;
44
import com.objectcomputing.checkins.security.ImpersonationController;
55
import com.objectcomputing.checkins.services.feedback_external_recipient.FeedbackExternalRecipientServices;
6+
import com.objectcomputing.checkins.services.memberprofile.*;
67
import io.micronaut.core.annotation.Nullable;
78
import io.micronaut.core.convert.format.Format;
89
import io.micronaut.http.HttpResponse;
@@ -39,10 +40,12 @@ public class FeedbackRequestExternalRecipientController {
3940
private final FeedbackExternalRecipientServices feedbackExternalRecipientServices;
4041
private static final Logger LOG = LoggerFactory.getLogger(FeedbackRequestExternalRecipientController.class);
4142
private static final Base64.Encoder base64Encoder = Base64.getUrlEncoder();
43+
private final MemberProfileServices memberProfileServices;
4244

43-
public FeedbackRequestExternalRecipientController(FeedbackRequestServices feedbackRequestServices, FeedbackExternalRecipientServices feedbackExternalRecipientServices) {
45+
public FeedbackRequestExternalRecipientController(FeedbackRequestServices feedbackRequestServices, FeedbackExternalRecipientServices feedbackExternalRecipientServices, MemberProfileServices memberProfileServices) {
4446
this.feedbackReqServices = feedbackRequestServices;
4547
this.feedbackExternalRecipientServices = feedbackExternalRecipientServices;
48+
this.memberProfileServices = memberProfileServices;
4649
}
4750

4851
/**
@@ -126,7 +129,45 @@ private FeedbackRequestResponseDTO feedbackRequestFromEntity(FeedbackRequest fee
126129
return dto;
127130
}
128131

132+
private MemberProfile fromDTO(MemberProfileUpdateDTO dto) {
133+
return new MemberProfile(dto.getId(), dto.getFirstName(), dto.getMiddleName(), dto.getLastName(),
134+
dto.getSuffix(), dto.getTitle(), dto.getPdlId(), dto.getLocation(), dto.getWorkEmail(),
135+
dto.getEmployeeId(), dto.getStartDate(), dto.getBioText(), dto.getSupervisorid(),
136+
dto.getTerminationDate(), dto.getBirthDay(), dto.getVoluntary(), dto.getExcluded(), dto.getLastSeen());
137+
}
138+
139+
private MemberProfile fromDTO(MemberProfileCreateDTO dto) {
140+
return new MemberProfile(dto.getFirstName(), dto.getMiddleName(), dto.getLastName(), dto.getSuffix(),
141+
dto.getTitle(), dto.getPdlId(), dto.getLocation(), dto.getWorkEmail(), dto.getEmployeeId(),
142+
dto.getStartDate(), dto.getBioText(), dto.getSupervisorid(), dto.getTerminationDate(), dto.getBirthDay(),
143+
dto.getVoluntary(), dto.getExcluded(), dto.getLastSeen());
144+
}
129145

146+
private MemberProfileResponseDTO fromEntity(MemberProfile entity) {
147+
MemberProfileResponseDTO dto = new MemberProfileResponseDTO();
148+
dto.setId(entity.getId());
149+
dto.setFirstName(entity.getFirstName());
150+
dto.setMiddleName(entity.getMiddleName());
151+
dto.setLastName(entity.getLastName());
152+
dto.setSuffix(entity.getSuffix());
153+
dto.setName(MemberProfileUtils.getFullName(entity));
154+
dto.setTitle(entity.getTitle());
155+
dto.setPdlId(entity.getPdlId());
156+
dto.setLocation(entity.getLocation());
157+
dto.setWorkEmail(entity.getWorkEmail());
158+
dto.setEmployeeId(entity.getEmployeeId());
159+
dto.setStartDate(entity.getStartDate());
160+
dto.setBioText(entity.getBioText());
161+
dto.setSupervisorid(entity.getSupervisorid());
162+
dto.setTerminationDate(entity.getTerminationDate());
163+
dto.setBirthDay(entity.getBirthDate());
164+
dto.setLastSeen(entity.getLastSeen());
165+
return dto;
166+
}
167+
168+
protected URI location(UUID id) {
169+
return URI.create("/member-profiles/" + id);
170+
}
130171

131172
@Get("/csrf/cookie")
132173
public HttpResponse <?> getCsrfToken() {
@@ -142,4 +183,40 @@ public HttpResponse <?> getCsrfToken() {
142183
;
143184
}
144185

186+
/**
187+
* Find requestee's member profile for the given FeedbackRequest ID
188+
*
189+
* @param id {@link UUID} ID of the feedback-reqeust record
190+
* @return {@link MemberProfileResponseDTO} Returned member profile
191+
*/
192+
@Get("/getRequesteeForFeedbackRequest/{id}")
193+
public HttpResponse<MemberProfileResponseDTO> getRequesteeForFeedbackRequest(UUID id) {
194+
FeedbackRequest feedbackRequest = feedbackReqServices.getById(id);
195+
if (feedbackRequest.getExternalRecipientId() == null) {
196+
throw new BadArgException("This feedback request is not for an external recipient");
197+
}
198+
199+
MemberProfile memberProfile = memberProfileServices.getById(feedbackRequest.getRequesteeId());
200+
return HttpResponse.ok(fromEntity(memberProfile))
201+
.headers(headers -> headers.location(location(memberProfile.getId())));
202+
}
203+
204+
/**
205+
* Find requester's member profile for the given FeedbackRequest ID
206+
*
207+
* @param id {@link UUID} ID of the feedback-reqeust record
208+
* @return {@link MemberProfileResponseDTO} Returned member profile
209+
*/
210+
@Get("/getRequesterForFeedbackRequest/{id}")
211+
public HttpResponse<MemberProfileResponseDTO> getRequesterForFeedbackRequest(UUID id) {
212+
FeedbackRequest feedbackRequest = feedbackReqServices.getById(id);
213+
if (feedbackRequest.getExternalRecipientId() == null) {
214+
throw new BadArgException("This feedback request is not for an external recipient");
215+
}
216+
217+
MemberProfile memberProfile = memberProfileServices.getById(feedbackRequest.getCreatorId());
218+
return HttpResponse.ok(fromEntity(memberProfile))
219+
.headers(headers -> headers.location(location(memberProfile.getId())));
220+
}
221+
145222
}

web-ui-external-feedback/src/api/feedback.js

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -307,14 +307,9 @@ export const getExternalRecipients = async (cookie) => {
307307
});
308308
};
309309

310-
export const putExternalRecipientInactivate = async (externalRecipientId, cookie) => {
310+
export const getRequesteeForFeedbackRequest = async (id, cookie) => {
311311
return resolve({
312-
method: 'PUT',
313-
url: `${feedbackExternalRecipientsURL}/inactivate/${externalRecipientId}`,
314-
headers: {
315-
'X-CSRF-Header': cookie,
316-
Accept: 'application/json',
317-
'Content-Type': 'application/json;charset=UTF-8'
318-
}
312+
url: `/getRequesteeForFeedbackRequest/${id}`,
313+
headers: { 'X-CSRF-Header': cookie, Accept: 'application/json' }
319314
});
320315
};

web-ui-external-feedback/src/components/routes/Routes.jsx

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
import React, { useContext } from 'react';
22
import { Switch, Route } from 'react-router-dom';
33
import { AppContext } from '../../context/AppContext';
4-
import FeedbackSubmitExternalRecipientPage from "../../pages/FeedbackSubmitExternalRecipientPage.jsx";
5-
4+
import FeedbackSubmitPage from "../../pages/FeedbackSubmitPage.jsx";
65

76
export default function Routes() {
87
const { state } = useContext(AppContext);
98

109
return (
1110
<Switch>
1211
<Route path="/externalFeedback/">
13-
<FeedbackSubmitExternalRecipientPage />
12+
<FeedbackSubmitPage />
1413
</Route>
1514
</Switch>
1615
);
Lines changed: 99 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
.feedback-request-page {
2+
margin: 4em 2em 0 2em;
3+
height: 100%;
4+
max-width: 100%;
5+
}
6+
7+
.header-container {
8+
display: flex;
9+
flex-direction: row;
10+
justify-content: space-between;
11+
align-items: center;
12+
margin: 0 0 2em 0;
13+
}
14+
15+
.card-container {
16+
margin: 1rem calc(2rem - 20px) 1rem calc(2rem - 20px);
17+
display: flex;
18+
flex-direction: row;
19+
flex-wrap: wrap;
20+
}
21+
22+
.disabled-link {
23+
pointer-events: none;
24+
text-decoration: none;
25+
}
26+
.no-underline-link {
27+
text-decoration: none;
28+
}
29+
30+
@media (min-width: 320px) and (max-width: 800px) {
31+
.feedback-request-page {
32+
display: flex;
33+
flex-direction: column;
34+
align-items: center;
35+
overflow-x: hidden;
36+
margin: 2rem 5% 0 5%;
37+
}
38+
39+
.header-container {
40+
margin: 0;
41+
}
42+
43+
.current-step-content {
44+
max-width: 100%;
45+
}
46+
47+
.card-container {
48+
width: 100%;
49+
align-self: center;
50+
align-items: center;
51+
flex-direction: column;
52+
margin: 0;
53+
}
54+
55+
.feedback-recipient-selector {
56+
padding: 1em 0 0;
57+
}
58+
59+
.feedback-template-card {
60+
max-width: 80%;
61+
max-height: 40%;
62+
}
63+
}
64+
65+
@media (max-width: 320px) {
66+
body {
67+
position: relative;
68+
}
69+
70+
.feedback-request-page {
71+
display: flex;
72+
flex-direction: column;
73+
align-items: center;
74+
align-self: center;
75+
overflow-x: hidden;
76+
}
77+
78+
.header-container {
79+
margin-left: 1em;
80+
margin-right: 1em;
81+
}
82+
83+
.card-container {
84+
width: 100%;
85+
align-self: center;
86+
align-items: center;
87+
flex-direction: column;
88+
margin: 0;
89+
}
90+
91+
.feedback-template-card {
92+
max-width: 70%;
93+
max-height: 30%;
94+
}
95+
96+
.feedback-recipient-selector {
97+
padding: 1em 0 0;
98+
}
99+
}

0 commit comments

Comments
 (0)