fix(navigation): correctifs flux retour post-rapport et post-sujets (reset sticky useEffect)

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Hermann_Kitio 2026-04-22 20:15:53 +03:00
parent f51caa1b75
commit da4e465125
3 changed files with 30 additions and 27 deletions

View file

@ -34,19 +34,24 @@ function SujetsSkeleton() {
export function SujetsPage() {
const navigate = useNavigate()
const { production, changeSubject, setStep } = useSimulationFlow()
const { step, production, changeSubject, setStep, reset } = useSimulationFlow()
// MVP : pas de production en contexte (refresh direct) → retour à /simulation/ee
// Redirige vers /simulation/ee si :
// - production absente (refresh direct sur /sujets sans contexte)
// - step === 'idle' (état initial, pas de simulation en cours)
// - step === 'done' (simulation corrigée — /sujets ne doit pas patcher
// une simulation dont le rapport est déjà persisté — cf. FTD-23)
const shouldRedirect = !production || step === 'idle' || step === 'done'
useEffect(() => {
if (!production) navigate('/simulation/ee', { replace: true })
}, [production, navigate])
if (shouldRedirect) navigate('/simulation/ee', { replace: true })
}, [shouldRedirect, navigate])
const { data: sujets, isLoading, isError, refetch } = useSujets(
production?.tache ?? 'EE_T1',
!!production,
!!production && !shouldRedirect,
)
if (!production) return null
if (shouldRedirect || !production) return null
function handleSelect(sujet: SujetData) {
changeSubject(sujet)
@ -71,7 +76,13 @@ export function SujetsPage() {
<div className="mb-4 flex items-center gap-3">
<button
type="button"
onClick={() => navigate('/simulation/ee')}
onClick={() => {
// « Retour » = annuler la simulation en cours et revenir au
// TaskSelector. reset() doit être appelé AVANT navigate pour que
// step retombe à 'idle' sans repasser par 'choosing-subject'.
reset()
navigate('/simulation/ee')
}}
className="text-sm text-ink-4 underline-offset-4 hover:text-ink-2 hover:underline"
>
Retour