From 0ad44fbaa7f880ab5242614f7142afdf9ecf244d Mon Sep 17 00:00:00 2001 From: IliesAllali Date: Tue, 20 Oct 2026 15:08:32 +0200 Subject: [PATCH] =?UTF-8?q?Propositions=20=C3=A0=20relire=20:=20la=20pasti?= =?UTF-8?q?lle=20s'allume=20d=C3=A8s=20l'ouverture=20de=20l'arbre?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Le compte des propositions en attente ne se chargeait qu'à l'ouverture de Partager ou du panneau des propositions. Il se charge maintenant quand le propriétaire ouvre son arbre et se remet à jour quand il revient sur l'onglet. Co-Authored-By: Claude Opus 5.5 --- frontend/src/hooks/useContributions.js | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/frontend/src/hooks/useContributions.js b/frontend/src/hooks/useContributions.js index 106e98b..253ed96 100644 --- a/frontend/src/hooks/useContributions.js +++ b/frontend/src/hooks/useContributions.js @@ -1,4 +1,4 @@ -import { useState } from 'react' +import { useEffect, useState } from 'react' import { listContributionSessions, submitContributionSession, @@ -21,6 +21,26 @@ const EMPTY_CONTRIB_STATE = { export function useContributions({ canEditCurrentTree, canSubmitContribution, treeContext, refreshCurrentTreeGraph }) { const [contribState, setContribState] = useState({ ...EMPTY_CONTRIB_STATE }) + // Pastille « Propositions à relire » : le compte se charge dès que le propriétaire ouvre son arbre, et se + // remet à jour quand il revient sur l'onglet, sans attendre qu'il ouvre le panneau des propositions + const { treeId, accessToken } = treeContext + useEffect(() => { + if (!canEditCurrentTree || !treeId || !accessToken) return undefined + let cancelled = false + const load = async () => { + try { + const sessions = await listContributionSessions(treeId, accessToken, 'pending') + if (!cancelled) setContribState((current) => ({ ...current, sessions })) + } catch { + // Le panneau affichera l'erreur s'il est ouvert ; la pastille reste telle quelle + } + } + load() + const onVisible = () => { if (document.visibilityState === 'visible') load() } + document.addEventListener('visibilitychange', onVisible) + return () => { cancelled = true; document.removeEventListener('visibilitychange', onVisible) } + }, [canEditCurrentTree, treeId, accessToken]) + const resetContribState = () => { setContribState({ ...EMPTY_CONTRIB_STATE }) }