Skip to content

Commit f85af6a

Browse files
author
Kshitij Fadnis
committed
fix (feedback): Remove feedback logic for demo purposes.
1 parent fb3596c commit f85af6a

File tree

2 files changed

+108
-591
lines changed

2 files changed

+108
-591
lines changed

src/components/answers/index.js

Lines changed: 49 additions & 294 deletions
Original file line numberDiff line numberDiff line change
@@ -35,223 +35,8 @@ import {
3535
ThumbsDownFilled,
3636
} from "@carbon/react/icons";
3737

38-
import { generateUUID } from "../../util/uuid";
39-
import {
40-
getFeedbacks as getFeedbacksAPI,
41-
postFeedback as postFeedbackAPI,
42-
updateFeedback as updateFeedbackAPI,
43-
} from "../../api/feedbacks";
44-
import { addNotification } from "../../components/notifications/notificationsSlice";
45-
4638
import "./styles.scss";
4739

48-
async function buildAnswersWithFeedback(
49-
question,
50-
answers,
51-
setAnswersWithFeedback,
52-
dispatch
53-
) {
54-
// Step 1: Build feedbackIdToAnswerIndex map and answersWithFeedback list
55-
let feedbackIdToAnswerIndexMap = new Map();
56-
let answersWithFeedback = [];
57-
58-
// Step 1.a: Iterate over each answer
59-
answers.forEach((answer, answerIndex) => {
60-
// Step 1.a.i: Generate feedback_id
61-
const feedback_id = generateUUID(
62-
question +
63-
"::" +
64-
answer.context.replace(/\s/g, "") +
65-
"::" +
66-
answer.text.replace(/\s/g, "") +
67-
"::" +
68-
answer.startCharOffset +
69-
"::" +
70-
answer.endCharOffset
71-
);
72-
73-
// Step 1.a.ii: Update feedbackIdToAnswerIndexMap
74-
feedbackIdToAnswerIndexMap.set(feedback_id, answerIndex);
75-
76-
// Step 1.a.iii: Copy answer over and add feedback information
77-
answersWithFeedback.push({
78-
...answer,
79-
feedback: { feedback_id: feedback_id },
80-
});
81-
});
82-
83-
// Step 2: Trigger [GET] /feedbacks API call for all identified feedback_ids
84-
let feedbacks = [];
85-
if (!_.isEmpty(feedbackIdToAnswerIndexMap)) {
86-
try {
87-
feedbacks = await getFeedbacksAPI([...feedbackIdToAnswerIndexMap.keys()]);
88-
} catch (err) {
89-
// Step 1: Dispatch appropriate add error notification event
90-
if (Object.hasOwn(err, "name") && err.name === "AxiosError") {
91-
dispatch(
92-
addNotification({
93-
notification: {
94-
notification: {
95-
id: "get_feedbacks--error",
96-
type: "Toast",
97-
kind: "error",
98-
title: err.name + " : " + err.message,
99-
subtitle: "Feedbacks may not be up-to-date.",
100-
},
101-
},
102-
})
103-
);
104-
} else {
105-
dispatch(
106-
addNotification({
107-
notification: {
108-
id: "get_feedbacks--error",
109-
type: "Toast",
110-
kind: "error",
111-
title: err.detail.code + " : " + err.detail.message,
112-
subtitle: "Feedbacks may not be up-to-date.",
113-
},
114-
})
115-
);
116-
}
117-
}
118-
}
119-
120-
// Step 3: If feedbacks exist, update feedback information in answersWithFeedback for appropriate answer
121-
if (!_.isEmpty(feedbacks)) {
122-
// Step 3.a: Iterate over each feedback
123-
feedbacks.forEach((feedback) => {
124-
const answerIndex = feedbackIdToAnswerIndexMap.get(feedback.feedback_id);
125-
if (!_.isNil(answerIndex)) {
126-
answersWithFeedback[answerIndex].feedback = { ...feedback };
127-
}
128-
});
129-
}
130-
131-
// Step 4: Set answersWithFeedback
132-
setAnswersWithFeedback(answersWithFeedback);
133-
}
134-
135-
async function updateFeedback(
136-
feedbackId,
137-
update,
138-
answersWithFeedback,
139-
setAnswersWithFeedback,
140-
dispatch
141-
) {
142-
try {
143-
// Step 1: Trigger [PATCH] /feedbacks/{feedback_id} API call
144-
const updatedFeedback = await updateFeedbackAPI(feedbackId, update);
145-
146-
// Step 2: Copy existing answer index to feedback map
147-
let updatedAnswersWithFeedback = answersWithFeedback.map(
148-
(answerWithFeedback) => {
149-
// Step 2.a: If feedback_id of new feedback matches with answerWithFeedback's feedback.feedback_id, update that answersWithFeedback
150-
if (
151-
answerWithFeedback.feedback.feedback_id ===
152-
updatedFeedback.feedback_id
153-
) {
154-
return { ...answerWithFeedback, feedback: updatedFeedback };
155-
} else {
156-
// Step 2.b: Return existing answerWithFeedback
157-
return answerWithFeedback;
158-
}
159-
}
160-
);
161-
162-
// Step 3: Set AnswersWithFeedback to new value
163-
setAnswersWithFeedback(updatedAnswersWithFeedback);
164-
} catch (err) {
165-
// Step 1: Dispatch appropriate add error notification event
166-
if (Object.hasOwn(err, "name") && err.name === "AxiosError") {
167-
dispatch(
168-
addNotification({
169-
notification: {
170-
notification: {
171-
id: "update_feedback--error",
172-
type: "Toast",
173-
kind: "error",
174-
title: err.name + " : " + err.message,
175-
subtitle: "Refer: contact us in README.",
176-
},
177-
},
178-
})
179-
);
180-
} else {
181-
dispatch(
182-
addNotification({
183-
notification: {
184-
id: "update_feedback--error",
185-
type: "Toast",
186-
kind: "error",
187-
title: err.detail.code + " : " + err.detail.message,
188-
subtitle: "Refer: contact us in README.",
189-
},
190-
})
191-
);
192-
}
193-
}
194-
}
195-
196-
async function postFeedback(
197-
feedback,
198-
answersWithFeedback,
199-
setAnswersWithFeedback,
200-
dispatch
201-
) {
202-
try {
203-
// Step 1: Trigger [POST] /feedbacks API call
204-
const newFeedback = await postFeedbackAPI(feedback);
205-
206-
// Step 2: Copy existing answer index to feedback map
207-
let updatedAnswersWithFeedback = answersWithFeedback.map(
208-
(answerWithFeedback) => {
209-
// Step 2.a: If feedback_id of new feedback matches with answerWithFeedback's feedback.feedback_id, update that answersWithFeedback
210-
if (
211-
answerWithFeedback.feedback.feedback_id === newFeedback.feedback_id
212-
) {
213-
return { ...answerWithFeedback, feedback: newFeedback };
214-
} else {
215-
// Step 2.b: Return existing answerWithFeedback
216-
return answerWithFeedback;
217-
}
218-
}
219-
);
220-
221-
// Step 3: Set AnswersWithFeedback to new value
222-
setAnswersWithFeedback(updatedAnswersWithFeedback);
223-
} catch (err) {
224-
// Step 1: Dispatch appropriate add error notification event
225-
if (Object.hasOwn(err, "name") && err.name === "AxiosError") {
226-
dispatch(
227-
addNotification({
228-
notification: {
229-
notification: {
230-
id: "post_feedback--error",
231-
type: "Toast",
232-
kind: "error",
233-
title: err.name + " : " + err.message,
234-
subtitle: "Refer: contact us in README.",
235-
},
236-
},
237-
})
238-
);
239-
} else {
240-
dispatch(
241-
addNotification({
242-
notification: {
243-
id: "post_feedback--error",
244-
type: "Toast",
245-
kind: "error",
246-
title: err.detail.code + " : " + err.detail.message,
247-
subtitle: "Refer: contact us in README.",
248-
},
249-
})
250-
);
251-
}
252-
}
253-
}
254-
25540
function Answers({ question, answers, loading, source }) {
25641
const [answersWithFeedback, setAnswersWithFeedback] = useState([]);
25742

@@ -262,11 +47,13 @@ function Answers({ question, answers, loading, source }) {
26247
if (_.isNil(answers) || _.isEmpty(answers)) {
26348
setAnswersWithFeedback([]);
26449
} else {
265-
buildAnswersWithFeedback(
266-
question,
267-
answers,
268-
setAnswersWithFeedback,
269-
dispatch
50+
setAnswersWithFeedback(
51+
answers.map((answer) => {
52+
return {
53+
...answer,
54+
feedback: { thumbs_up: false, thumbs_down: false },
55+
};
56+
})
27057
);
27158
}
27259
}, [question, answers, dispatch]);
@@ -358,43 +145,27 @@ function Answers({ question, answers, loading, source }) {
358145
}
359146
iconDescription="Yes"
360147
onClick={() => {
361-
// Step 1: If existing feedback exist, update with new information
362-
if (
363-
!_.isNil(answerWithFeedback.feedback.thumbs_up) ||
364-
!_.isNil(answerWithFeedback.feedback.thumbs_down)
365-
) {
366-
updateFeedback(
367-
answerWithFeedback.feedback.feedback_id,
368-
{
369-
thumbs_up: true,
370-
thumbs_down: false,
371-
},
372-
answersWithFeedback,
373-
setAnswersWithFeedback,
374-
dispatch
375-
);
376-
} else {
377-
// Step 2: Create new feedback
378-
postFeedback(
379-
{
380-
feedback_id:
381-
answerWithFeedback.feedback.feedback_id,
382-
question: question,
383-
context: answerWithFeedback.context,
384-
thumbs_up: true,
385-
thumbs_down: false,
386-
answer: answerWithFeedback.text,
387-
start_char_offset:
388-
answerWithFeedback.startCharOffset,
389-
end_char_offset:
390-
answerWithFeedback.endCharOffset,
391-
application: source,
392-
},
393-
answersWithFeedback,
394-
setAnswersWithFeedback,
395-
dispatch
396-
);
397-
}
148+
setAnswersWithFeedback(
149+
answersWithFeedback.map((entry, entry_idx) => {
150+
if (entry_idx === index) {
151+
// Step 1.a.i: Create deep copy of the answerWithFeeback object to be updated
152+
let updatedAnswerWithFeedback =
153+
_.cloneDeep(entry);
154+
155+
// Step 1.a.ii: Update "feedback" value
156+
updatedAnswerWithFeedback.feedback = {
157+
thumbs_up: true,
158+
thumbs_down: false,
159+
};
160+
161+
// Step 1.a.iii: Return updated answerWithFeeback object
162+
return updatedAnswerWithFeedback;
163+
} else {
164+
// Step 1.b: Return other answerWithFeeback objects as it is
165+
return entry;
166+
}
167+
})
168+
);
398169
}}
399170
></Button>
400171
<Button
@@ -407,43 +178,27 @@ function Answers({ question, answers, loading, source }) {
407178
}
408179
iconDescription="Yes"
409180
onClick={() => {
410-
// Step 1: If existing feedback exist, update with new information
411-
if (
412-
!_.isNil(answerWithFeedback.feedback.thumbs_up) ||
413-
!_.isNil(answerWithFeedback.feedback.thumbs_down)
414-
) {
415-
updateFeedback(
416-
answerWithFeedback.feedback.feedback_id,
417-
{
418-
thumbs_up: false,
419-
thumbs_down: true,
420-
},
421-
answersWithFeedback,
422-
setAnswersWithFeedback,
423-
dispatch
424-
);
425-
} else {
426-
// Step 2: Create new feedback
427-
postFeedback(
428-
{
429-
feedback_id:
430-
answerWithFeedback.feedback.feedback_id,
431-
question: question,
432-
context: answerWithFeedback.context,
433-
thumbs_up: false,
434-
thumbs_down: true,
435-
answer: answerWithFeedback.text,
436-
start_char_offset:
437-
answerWithFeedback.startCharOffset,
438-
end_char_offset:
439-
answerWithFeedback.endCharOffset,
440-
application: source,
441-
},
442-
answersWithFeedback,
443-
setAnswersWithFeedback,
444-
dispatch
445-
);
446-
}
181+
setAnswersWithFeedback(
182+
answersWithFeedback.map((entry, entry_idx) => {
183+
if (entry_idx === index) {
184+
// Step 1.a.i: Create deep copy of the answerWithFeeback object to be updated
185+
let updatedAnswerWithFeedback =
186+
_.cloneDeep(entry);
187+
188+
// Step 1.a.ii: Update "feedback" value
189+
updatedAnswerWithFeedback.feedback = {
190+
thumbs_up: false,
191+
thumbs_down: true,
192+
};
193+
194+
// Step 1.a.iii: Return updated answerWithFeeback object
195+
return updatedAnswerWithFeedback;
196+
} else {
197+
// Step 1.b: Return other answerWithFeeback objects as it is
198+
return entry;
199+
}
200+
})
201+
);
447202
}}
448203
></Button>
449204
</div>

0 commit comments

Comments
 (0)