Spaces:
Paused
Paused
| import React from 'react'; | |
| import Question from './ResearchBlocks/Question'; | |
| import Answer from './ResearchBlocks/Answer'; | |
| import Sources from './ResearchBlocks/Sources'; | |
| import ImageSection from './ResearchBlocks/ImageSection'; | |
| import SubQuestions from './ResearchBlocks/elements/SubQuestions'; | |
| import LogsSection from './ResearchBlocks/LogsSection'; | |
| import AccessReport from './ResearchBlocks/AccessReport'; | |
| import { preprocessOrderedData } from '../utils/dataProcessing'; | |
| import { Data } from '../types/data'; | |
| interface ResearchResultsProps { | |
| orderedData: Data[]; | |
| answer: string; | |
| allLogs: any[]; | |
| chatBoxSettings: any; | |
| handleClickSuggestion: (value: string) => void; | |
| } | |
| export const ResearchResults: React.FC<ResearchResultsProps> = ({ | |
| orderedData, | |
| answer, | |
| allLogs, | |
| chatBoxSettings, | |
| handleClickSuggestion | |
| }) => { | |
| const groupedData = preprocessOrderedData(orderedData); | |
| const pathData = groupedData.find(data => data.type === 'path'); | |
| const initialQuestion = groupedData.find(data => data.type === 'question'); | |
| const chatComponents = groupedData | |
| .filter(data => { | |
| if (data.type === 'question' && data === initialQuestion) { | |
| return false; | |
| } | |
| return (data.type === 'question' || data.type === 'chat'); | |
| }) | |
| .map((data, index) => { | |
| if (data.type === 'question') { | |
| return <Question key={`question-${index}`} question={data.content} />; | |
| } else { | |
| return <Answer key={`chat-${index}`} answer={data.content} />; | |
| } | |
| }); | |
| const sourceComponents = groupedData | |
| .filter(data => data.type === 'sourceBlock') | |
| .map((data, index) => ( | |
| <Sources key={`sourceBlock-${index}`} sources={data.items}/> | |
| )); | |
| const imageComponents = groupedData | |
| .filter(data => data.type === 'imagesBlock') | |
| .map((data, index) => ( | |
| <ImageSection key={`images-${index}`} metadata={data.metadata} /> | |
| )); | |
| const initialReport = groupedData.find(data => data.type === 'reportBlock'); | |
| const finalReport = groupedData | |
| .filter(data => data.type === 'reportBlock') | |
| .pop(); | |
| const subqueriesComponent = groupedData.find(data => data.content === 'subqueries'); | |
| return ( | |
| <> | |
| {orderedData.length > 0 && <LogsSection logs={allLogs} />} | |
| {initialQuestion && <Question question={initialQuestion.content} />} | |
| {subqueriesComponent && ( | |
| <SubQuestions | |
| metadata={subqueriesComponent.metadata} | |
| handleClickSuggestion={handleClickSuggestion} | |
| /> | |
| )} | |
| {sourceComponents} | |
| {imageComponents} | |
| {finalReport && <Answer answer={finalReport.content} />} | |
| {pathData && <AccessReport accessData={pathData.output} report={answer} chatBoxSettings={chatBoxSettings} />} | |
| {chatComponents} | |
| </> | |
| ); | |
| }; |