Skip to content

Commit 7e9d353

Browse files
committed
Complete
1 parent 1324269 commit 7e9d353

File tree

2 files changed

+42
-40
lines changed

2 files changed

+42
-40
lines changed

web-ui/src/components/view_feedback_responses/ViewFeedbackResponses.jsx

Lines changed: 29 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ import { getAvatarURL } from '../../api/api';
1515
import CheckBoxOutlineBlankIcon from '@mui/icons-material/CheckBoxOutlineBlank';
1616
import CheckBoxIcon from '@mui/icons-material/CheckBox';
1717
import SkeletonLoader from '../skeleton_loader/SkeletonLoader';
18-
import ReportProblemOutlinedIcon from '@mui/icons-material/ReportProblemOutlined'; // Import the caution icon
18+
import ReportProblemOutlinedIcon from '@mui/icons-material/ReportProblemOutlined';
1919

2020
import './ViewFeedbackResponses.css';
2121

@@ -46,15 +46,13 @@ const Root = styled('div')({
4646
marginRight: '3em',
4747
width: '350px',
4848
['@media (max-width: 800px)']: {
49-
// eslint-disable-line no-useless-computed-key
5049
marginRight: 0,
5150
width: '100%'
5251
}
5352
},
5453
[`& .${classes.responderField}`]: {
5554
minWidth: '500px',
5655
['@media (max-width: 800px)']: {
57-
// eslint-disable-line no-useless-computed-key
5856
minWidth: 0,
5957
width: '100%'
6058
}
@@ -71,8 +69,7 @@ const ViewFeedbackResponses = () => {
7169
const [searchText, setSearchText] = useState('');
7270
const [responderOptions, setResponderOptions] = useState([]);
7371
const [selectedResponders, setSelectedResponders] = useState([]);
74-
const [filteredQuestionsAndAnswers, setFilteredQuestionsAndAnswers] =
75-
useState([]);
72+
const [filteredQuestionsAndAnswers, setFilteredQuestionsAndAnswers] = useState([]);
7673
const [isLoading, setIsLoading] = useState(true);
7774

7875
useEffect(() => {
@@ -93,7 +90,8 @@ const ViewFeedbackResponses = () => {
9390
...question,
9491
answers: question.answers.map(answer => ({
9592
...answer,
96-
answer: isEmptyOrWhitespace(answer.answer) ? ' ⚠️ No response submitted' : String(answer.answer)
93+
// Ensure blank, null, undefined, or non-string answers are handled
94+
answer: isEmptyOrWhitespace(answer.answer) ? ' ⚠️ No response submitted' : String(answer.answer),
9795
}))
9896
}));
9997

@@ -161,35 +159,24 @@ const ViewFeedbackResponses = () => {
161159
let responsesToDisplay = [...questionsAndAnswers];
162160

163161
responsesToDisplay = responsesToDisplay.map(response => {
164-
// Filter based on selected responders
165162
let filteredAnswers = response.answers.filter(answer =>
166163
selectedResponders.includes(answer.responder)
167164
);
168165
if (searchText.trim()) {
169-
// Filter based on search text
170166
filteredAnswers = filteredAnswers.filter(
171167
({ answer }) =>
172168
answer &&
173169
answer.toLowerCase().includes(searchText.trim().toLowerCase())
174170
);
175171
}
176172

177-
// Ensure blank, null, undefined, or non-string answers are handled
178-
filteredAnswers = filteredAnswers.map(answer => ({
179-
...answer,
180-
answer: isEmptyOrWhitespace(answer.answer) ? ' ⚠️ No response submitted' : String(answer.answer)
181-
}));
182-
183173
return { ...response, answers: filteredAnswers };
184174
});
185175

186176
setFilteredQuestionsAndAnswers(responsesToDisplay);
187177
}, [searchText, selectedResponders]); // eslint-disable-line react-hooks/exhaustive-deps
188178

189-
useEffect(() => {
190-
console.log("CSRF Token:", csrf);
191-
}, [csrf, state]);
192-
179+
// Add "No input" for questions with inputType "NONE"
193180
useEffect(() => {
194181
if (isLoading && filteredQuestionsAndAnswers.length > 0) {
195182
setIsLoading(false);
@@ -200,7 +187,6 @@ const ViewFeedbackResponses = () => {
200187
setSelectedResponders(responderOptions);
201188
};
202189

203-
// Updated isEmptyOrWhitespace function to handle non-string values
204190
const isEmptyOrWhitespace = (text) => {
205191
return typeof text !== 'string' || !text.trim();
206192
};
@@ -319,24 +305,34 @@ const ViewFeedbackResponses = () => {
319305
{questionText}
320306
</Typography>
321307

322-
{!hasResponses && (
308+
{/* If the question has no answers or inputType is "NONE" */}
309+
{!hasResponses || question.inputType === 'NONE' ? (
323310
<div className="no-responses-found">
324-
<Typography variant="body1" style={{ color: 'gray', display: 'flex', alignItems: 'center' }}>
325-
<ReportProblemOutlinedIcon style={{ marginRight: '0.5em' }} />
326-
⚠️ No response submitted
311+
<Typography
312+
variant="body1"
313+
style={{
314+
color: 'gray',
315+
display: 'flex',
316+
alignItems: 'center'
317+
}}
318+
>
319+
<ReportProblemOutlinedIcon
320+
style={{ marginRight: '0.5em' }}
321+
/>
322+
{question.inputType === 'NONE' ? 'No input available for this question.' : '⚠️ No response submitted'}
327323
</Typography>
328324
</div>
325+
) : (
326+
question.answers.map(answer => (
327+
<FeedbackResponseCard
328+
key={answer.id || answer.responder}
329+
responderId={answer.responder}
330+
answer={isEmptyOrWhitespace(answer.answer) ? ' ⚠️ No response submitted' : String(answer.answer)}
331+
inputType={question.inputType}
332+
sentiment={answer.sentiment}
333+
/>
334+
))
329335
)}
330-
331-
{hasResponses && question.answers.map(answer => (
332-
<FeedbackResponseCard
333-
key={answer.id || answer.responder}
334-
responderId={answer.responder}
335-
answer={isEmptyOrWhitespace(answer.answer) ? ' ⚠️ No response submitted' : String(answer.answer)}
336-
inputType={question.inputType}
337-
sentiment={answer.sentiment}
338-
/>
339-
))}
340336
</div>
341337
);
342338
})}

web-ui/src/components/view_feedback_responses/feedback_response_card/FeedbackResponseCard.jsx

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import FeedbackAnswerInput from '../../feedback_answer_input/FeedbackAnswerInput
1212

1313
const propTypes = {
1414
responderId: PropTypes.string.isRequired,
15-
answer: PropTypes.string, // Make answer optional in case it's null
15+
answer: PropTypes.string, // Allow answer to be null or undefined
1616
inputType: PropTypes.string.isRequired,
1717
sentiment: PropTypes.number
1818
};
@@ -21,12 +21,18 @@ const FeedbackResponseCard = props => {
2121
const { state } = useContext(AppContext);
2222
const userInfo = selectProfile(state, props.responderId);
2323

24-
// Fallback answer handling
24+
// Handle different input types and answer values
2525
const getFormattedAnswer = () => {
26-
// Check if the answer is a string and has content, otherwise return the fallback
27-
return typeof props.answer === 'string' && props.answer.trim()
28-
? props.answer
29-
: ' ⚠️ No response submitted';
26+
if (props.inputType === 'NONE') {
27+
return 'No input'; // Display "No input" if the question input type is "NONE"
28+
}
29+
30+
// Return fallback if the answer is null, undefined, or empty
31+
if (props.answer === null || props.answer === undefined || !props.answer.trim()) {
32+
return '⚠️ No response submitted';
33+
}
34+
35+
return props.answer;
3036
};
3137

3238
return (
@@ -42,7 +48,7 @@ const FeedbackResponseCard = props => {
4248
<FeedbackAnswerInput
4349
inputType={props.inputType}
4450
readOnly
45-
answer={getFormattedAnswer()}
51+
answer={getFormattedAnswer()} // Ensure the proper message is displayed
4652
/>
4753
</CardContent>
4854
</Card>

0 commit comments

Comments
 (0)