Skip to content

Commit 16c8e6e

Browse files
Answer component updated
1 parent 9a19fba commit 16c8e6e

File tree

1 file changed

+56
-54
lines changed
  • ClientAdvisor/App/frontend/src/components/Answer

1 file changed

+56
-54
lines changed

ClientAdvisor/App/frontend/src/components/Answer/Answer.tsx

Lines changed: 56 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import { parseAnswer } from './AnswerParser'
1818
import styles from './Answer.module.css'
1919
import rehypeRaw from 'rehype-raw'
2020

21-
2221
interface Props {
2322
answer: AskResponse
2423
onCitationClicked: (citedDocument: Citation) => void
@@ -79,72 +78,73 @@ export const Answer = ({ answer, onCitationClicked }: Props) => {
7978
} else {
8079
citationFilename = `${citation.filepath} - Part ${part_i}`
8180
}
82-
// } else if (citation.filepath && citation.reindex_id) {
83-
// citationFilename = `${citation.filepath} - Part ${citation.reindex_id}`
8481
} else {
8582
citationFilename = `Citation ${index}`
8683
}
8784
return citationFilename
8885
}
8986

9087
const onLikeResponseClicked = async () => {
91-
if (answer.message_id == undefined) return
88+
if (answer.message_id) {
89+
let newFeedbackState = feedbackState
90+
// Set or unset the thumbs up state
91+
if (feedbackState == Feedback.Positive) {
92+
newFeedbackState = Feedback.Neutral
93+
} else {
94+
newFeedbackState = Feedback.Positive
95+
}
96+
appStateContext?.dispatch({
97+
type: 'SET_FEEDBACK_STATE',
98+
payload: { answerId: answer.message_id, feedback: newFeedbackState }
99+
})
100+
setFeedbackState(newFeedbackState)
92101

93-
let newFeedbackState = feedbackState
94-
// Set or unset the thumbs up state
95-
if (feedbackState == Feedback.Positive) {
96-
newFeedbackState = Feedback.Neutral
97-
} else {
98-
newFeedbackState = Feedback.Positive
102+
// Update message feedback in db
103+
await historyMessageFeedback(answer.message_id, newFeedbackState)
99104
}
100-
appStateContext?.dispatch({
101-
type: 'SET_FEEDBACK_STATE',
102-
payload: { answerId: answer.message_id, feedback: newFeedbackState }
103-
})
104-
setFeedbackState(newFeedbackState)
105-
106-
// Update message feedback in db
107-
await historyMessageFeedback(answer.message_id, newFeedbackState)
108105
}
109106

110107
const onDislikeResponseClicked = async () => {
111-
if (answer.message_id == undefined) return
112-
113-
let newFeedbackState = feedbackState
114-
if (feedbackState === undefined || feedbackState === Feedback.Neutral || feedbackState === Feedback.Positive) {
115-
newFeedbackState = Feedback.Negative
116-
setFeedbackState(newFeedbackState)
117-
setIsFeedbackDialogOpen(true)
118-
} else {
119-
// Reset negative feedback to neutral
120-
newFeedbackState = Feedback.Neutral
121-
setFeedbackState(newFeedbackState)
122-
await historyMessageFeedback(answer.message_id, Feedback.Neutral)
108+
if (answer.message_id) {
109+
let newFeedbackState = feedbackState
110+
if (feedbackState === undefined || feedbackState === Feedback.Neutral || feedbackState === Feedback.Positive) {
111+
newFeedbackState = Feedback.Negative
112+
setFeedbackState(newFeedbackState)
113+
setIsFeedbackDialogOpen(true)
114+
} else {
115+
// Reset negative feedback to neutral
116+
newFeedbackState = Feedback.Neutral
117+
setFeedbackState(newFeedbackState)
118+
await historyMessageFeedback(answer.message_id, Feedback.Neutral)
119+
}
120+
appStateContext?.dispatch({
121+
type: 'SET_FEEDBACK_STATE',
122+
payload: { answerId: answer.message_id, feedback: newFeedbackState }
123+
})
123124
}
124-
appStateContext?.dispatch({
125-
type: 'SET_FEEDBACK_STATE',
126-
payload: { answerId: answer.message_id, feedback: newFeedbackState }
127-
})
128125
}
129126

130127
const updateFeedbackList = (ev?: FormEvent<HTMLElement | HTMLInputElement>, checked?: boolean) => {
131-
if (answer.message_id == undefined) return
132-
const selectedFeedback = (ev?.target as HTMLInputElement)?.id as Feedback
128+
if (answer.message_id){
129+
const selectedFeedback = (ev?.target as HTMLInputElement)?.id as Feedback
133130

134-
let feedbackList = negativeFeedbackList.slice()
135-
if (checked) {
136-
feedbackList.push(selectedFeedback)
137-
} else {
138-
feedbackList = feedbackList.filter(f => f !== selectedFeedback)
131+
let feedbackList = negativeFeedbackList.slice()
132+
if (checked) {
133+
feedbackList.push(selectedFeedback)
134+
} else {
135+
feedbackList = feedbackList.filter(f => f !== selectedFeedback)
136+
}
137+
138+
setNegativeFeedbackList(feedbackList)
139139
}
140-
141-
setNegativeFeedbackList(feedbackList)
140+
142141
}
143142

144143
const onSubmitNegativeFeedback = async () => {
145-
if (answer.message_id == undefined) return
146-
await historyMessageFeedback(answer.message_id, negativeFeedbackList.join(','))
147-
resetFeedbackDialog()
144+
if (answer.message_id) {
145+
await historyMessageFeedback(answer.message_id, negativeFeedbackList.join(','))
146+
resetFeedbackDialog()
147+
}
148148
}
149149

150150
const resetFeedbackDialog = () => {
@@ -184,7 +184,7 @@ export const Answer = ({ answer, onCitationClicked }: Props) => {
184184
defaultChecked={negativeFeedbackList.includes(Feedback.OtherUnhelpful)}
185185
onChange={updateFeedbackList}></Checkbox>
186186
</Stack>
187-
<div onClick={() => setShowReportInappropriateFeedback(true)} style={{ color: '#115EA3', cursor: 'pointer' }}>
187+
<div data-testid="InappropriateFeedback" onClick={() => setShowReportInappropriateFeedback(true)} style={{ color: '#115EA3', cursor: 'pointer' }}>
188188
Report inappropriate content
189189
</div>
190190
</>
@@ -193,7 +193,7 @@ export const Answer = ({ answer, onCitationClicked }: Props) => {
193193

194194
const ReportInappropriateFeedbackContent = () => {
195195
return (
196-
<>
196+
<div data-testid="ReportInappropriateFeedbackContent">
197197
<div>
198198
The content is <span style={{ color: 'red' }}>*</span>
199199
</div>
@@ -224,12 +224,12 @@ export const Answer = ({ answer, onCitationClicked }: Props) => {
224224
defaultChecked={negativeFeedbackList.includes(Feedback.OtherHarmful)}
225225
onChange={updateFeedbackList}></Checkbox>
226226
</Stack>
227-
</>
227+
</div>
228228
)
229229
}
230230

231231
const components = {
232-
code({ node, ...props }: { node: any; [key: string]: any }) {
232+
code({ node, ...props }: { node: any;[key: string]: any }) {
233233
let language
234234
if (props.className) {
235235
const match = props.className.match(/language-(\w+)/)
@@ -252,6 +252,7 @@ export const Answer = ({ answer, onCitationClicked }: Props) => {
252252
<ReactMarkdown
253253
linkTarget="_blank"
254254
remarkPlugins={[remarkGfm, supersub]}
255+
rehypePlugins={[rehypeRaw]}
255256
children={
256257
SANITIZE_ANSWER
257258
? DOMPurify.sanitize(parsedAnswer.markdownFormatText, { ALLOWED_TAGS: XSSAllowTags })
@@ -270,7 +271,7 @@ export const Answer = ({ answer, onCitationClicked }: Props) => {
270271
onClick={() => onLikeResponseClicked()}
271272
style={
272273
feedbackState === Feedback.Positive ||
273-
appStateContext?.state.feedbackState[answer.message_id] === Feedback.Positive
274+
appStateContext?.state.feedbackState[answer.message_id] === Feedback.Positive
274275
? { color: 'darkgreen', cursor: 'pointer' }
275276
: { color: 'slategray', cursor: 'pointer' }
276277
}
@@ -281,8 +282,8 @@ export const Answer = ({ answer, onCitationClicked }: Props) => {
281282
onClick={() => onDislikeResponseClicked()}
282283
style={
283284
feedbackState !== Feedback.Positive &&
284-
feedbackState !== Feedback.Neutral &&
285-
feedbackState !== undefined
285+
feedbackState !== Feedback.Neutral &&
286+
feedbackState !== undefined
286287
? { color: 'darkred', cursor: 'pointer' }
287288
: { color: 'slategray', cursor: 'pointer' }
288289
}
@@ -294,7 +295,7 @@ export const Answer = ({ answer, onCitationClicked }: Props) => {
294295
</Stack.Item>
295296
<Stack horizontal className={styles.answerFooter}>
296297
{!!parsedAnswer.citations.length && (
297-
<Stack.Item onKeyDown={e => (e.key === 'Enter' || e.key === ' ' ? toggleIsRefAccordionOpen() : null)}>
298+
<Stack.Item data-testid="stack-item" onKeyDown={e => (e.key === 'Enter' || e.key === ' ' ? toggleIsRefAccordionOpen() : null)}>
298299
<Stack style={{ width: '100%' }}>
299300
<Stack horizontal horizontalAlign="start" verticalAlign="center">
300301
<Text
@@ -310,6 +311,7 @@ export const Answer = ({ answer, onCitationClicked }: Props) => {
310311
</span>
311312
</Text>
312313
<FontIcon
314+
data-testid="ChevronIcon"
313315
className={styles.accordionIcon}
314316
onClick={handleChevronClick}
315317
iconName={chevronIsExpanded ? 'ChevronDown' : 'ChevronRight'}

0 commit comments

Comments
 (0)