diff --git a/src/pages/Evaluations.tsx b/src/pages/Evaluations.tsx index 7e7b71b..1ef4ca6 100644 --- a/src/pages/Evaluations.tsx +++ b/src/pages/Evaluations.tsx @@ -13,6 +13,7 @@ import { TextWithSources } from 'components/Sources/TextWithSources' import { EventSourcePolyfill } from 'event-source-polyfill' import { useCallback, useEffect, useRef, useState } from 'react' import { onCloseStream } from '../utils/eventsEmitter' +import { useNavigate, useLocation } from 'react-router-dom' import { negativeTags, positiveTags, @@ -185,24 +186,28 @@ const questions = [ ] export default function Evaluations() { - const [selectedCardIndex, setSelectedCardIndex] = useState(null) + const navigate = useNavigate() + const location = useLocation() + + // Determine whether we're on the panel or the questions list + const selectedCardIndex = location.state?.selectedCardIndex ?? null const handleBack = () => { - setSelectedCardIndex(null) + navigate('/evaluations', { state: null }) } return ( -
+
{selectedCardIndex === null ? ( <>

Sélectionnez une question

- Dans le cadre de l’expérimentation nous entamons une phase de ré-évaluation du - modèle proposé sur des questions pré-définies. Le travail s’effectue sur un + Dans le cadre de l’expérimentation, nous entamons une phase de ré-évaluation + du modèle proposé sur des questions pré-définies. Le travail s’effectue sur un échantillon de X questions à évaluer. Nous en présentons à chaque évaluation 5 de manière aléatoire.

- + ) : ( - // } +function Questions({ navigate }) { + const [filteredQuestions, setFilteredQuestions] = useState([]) + const [evaluatedQuestions, setEvaluatedQuestions] = useState( + JSON.parse(localStorage.getItem('evaluatedQuestions') || '[]'), + ) + useEffect(() => { - console.log('render') - }, []) + const unevaluatedQuestions = questions.filter( + (q, index) => !evaluatedQuestions.includes(index), + ) + const shuffledQuestions = unevaluatedQuestions + .map((q, index) => ({ ...q, originalIndex: questions.indexOf(q) })) + .sort(() => Math.random() - 0.5) + .slice(0, 5) + + setFilteredQuestions(shuffledQuestions) + }, [evaluatedQuestions]) + + const handleEvaluation = (index) => { + const newEvaluatedQuestions = [...evaluatedQuestions, index] + localStorage.setItem('evaluatedQuestions', JSON.stringify(newEvaluatedQuestions)) + setEvaluatedQuestions(newEvaluatedQuestions) + } + return (
- {questions.map((question, index) => ( - - ))} + {filteredQuestions.length > 0 ? ( + filteredQuestions.map((question, idx) => ( + + navigate('/evaluations', { + state: { selectedCardIndex: question.originalIndex }, + }) + } + onEvaluate={() => handleEvaluation(question.originalIndex)} + /> + )) + ) : ( +

+ Il n'y a plus de questions à évaluer. Merci pour votre contribution ! +

+ )}
) } @@ -250,17 +280,20 @@ function QuestionRow({ theme, operators, complexity, - setSelectedCardIndex, + onSelect, + onEvaluate, }: { index: number question: string theme: string operators: string[] complexity: string - setSelectedCardIndex: (index: number) => void + onSelect: () => void + onEvaluate: () => void }) { const handleClick = () => { - setSelectedCardIndex(index) + onSelect() + onEvaluate() } const handleKeyDown = (e: React.KeyboardEvent) => { @@ -273,7 +306,7 @@ function QuestionRow({ return ( <>
{ setShowErrorNotice(false) - // TODO: BACK END LOGIC if (isSubmitDisabled) return if (!streamId) { setShowErrorNotice(true) @@ -579,7 +611,7 @@ function AnswerPannel({ const prompt = { chat_type: 'evaluations', themes: [theme], - operators: [operators], + operators: operators, } // Auto-scroll to bottom when new content is added