central view
This commit is contained in:
@@ -182,6 +182,7 @@ function TutorApp({ currentUser, onLogout }) {
|
||||
password: '',
|
||||
})
|
||||
const [messages, setMessages] = useState([])
|
||||
const [currentInstruction, setCurrentInstruction] = useState('')
|
||||
const [input, setInput] = useState('')
|
||||
const [progress, setProgress] = useState([])
|
||||
const [assessment, setAssessment] = useState(null)
|
||||
@@ -225,11 +226,6 @@ function TutorApp({ currentUser, onLogout }) {
|
||||
[voiceProfiles, selectedVoiceProfileId]
|
||||
)
|
||||
|
||||
const latestAssistantMessage = useMemo(
|
||||
() => [...messages].reverse().find((message) => message.role === 'assistant') || null,
|
||||
[messages]
|
||||
)
|
||||
|
||||
const averageScore = useMemo(() => {
|
||||
if (!progress.length) return 0
|
||||
const total = progress.reduce((sum, item) => sum + item.mastery_score, 0)
|
||||
@@ -263,6 +259,7 @@ function TutorApp({ currentUser, onLogout }) {
|
||||
}, [speaking])
|
||||
|
||||
useEffect(() => {
|
||||
setCurrentInstruction('')
|
||||
if (selectedStudentId) {
|
||||
loadProgress(selectedStudentId)
|
||||
loadMessages(selectedStudentId)
|
||||
@@ -370,6 +367,7 @@ function TutorApp({ currentUser, onLogout }) {
|
||||
setErrorMessage('')
|
||||
const data = await apiFetch(`/session/start?student_id=${selectedStudentId}`, { method: 'POST' })
|
||||
appendMessage('assistant', data.reply)
|
||||
setCurrentInstruction(data.reply)
|
||||
speak(data.reply)
|
||||
await loadProgress(selectedStudentId)
|
||||
} catch (error) {
|
||||
@@ -398,6 +396,7 @@ function TutorApp({ currentUser, onLogout }) {
|
||||
const data = await apiFetch(`/assessment/next/${selectedStudentId}`)
|
||||
setAssessment(data)
|
||||
setAssessmentAnswer('')
|
||||
setCurrentInstruction(data.question)
|
||||
} catch (error) {
|
||||
setErrorMessage(error.message || 'Impossible de charger le mini-test.')
|
||||
}
|
||||
@@ -419,6 +418,7 @@ function TutorApp({ currentUser, onLogout }) {
|
||||
})
|
||||
appendMessage('user', `Reponse au mini-test: ${assessmentAnswer}`)
|
||||
appendMessage('assistant', data.feedback)
|
||||
setCurrentInstruction(data.feedback)
|
||||
speak(data.feedback)
|
||||
setAssessment(null)
|
||||
setAssessmentAnswer('')
|
||||
@@ -564,6 +564,7 @@ function TutorApp({ currentUser, onLogout }) {
|
||||
body: JSON.stringify({ student_id: Number(selectedStudentId), message: text }),
|
||||
})
|
||||
appendMessage('assistant', data.reply)
|
||||
setCurrentInstruction(data.reply)
|
||||
speak(data.reply)
|
||||
}
|
||||
|
||||
@@ -890,17 +891,17 @@ function TutorApp({ currentUser, onLogout }) {
|
||||
</div>
|
||||
|
||||
<section className="instruction-stage">
|
||||
<span className="stage-label">Derniere instruction</span>
|
||||
{latestAssistantMessage ? (
|
||||
<p>{latestAssistantMessage.content}</p>
|
||||
<span className="stage-label">Cours en cours</span>
|
||||
{currentInstruction ? (
|
||||
<p>{currentInstruction}</p>
|
||||
) : (
|
||||
<p className="muted">
|
||||
Demarre la seance pour afficher ici la consigne de Professeur TOP.
|
||||
Demarre la seance pour que Professeur TOP reprenne ou tu t'etais arrete et lance le cours du jour.
|
||||
</p>
|
||||
)}
|
||||
</section>
|
||||
|
||||
<section className="messages">
|
||||
<section className="messages" aria-label="Journal compact de la seance">
|
||||
{messages.length === 0 && <p className="muted">Le dialogue apparaîtra ici.</p>}
|
||||
{messages.map((message) => (
|
||||
<div key={message.id} className={`message ${message.role}`}>
|
||||
|
||||
Reference in New Issue
Block a user