diff --git a/frontend/src/hooks/useContributions.js b/frontend/src/hooks/useContributions.js index f9d5433..deb11e8 100644 --- a/frontend/src/hooks/useContributions.js +++ b/frontend/src/hooks/useContributions.js @@ -261,6 +261,12 @@ export function useContributions({ canEditCurrentTree, canSubmitContribution, tr reviewingSessionId: '', })) } catch (error) { + // Déjà relue ailleurs (un autre onglet, un co-gestionnaire) : l'arbre et la liste se remettent à jour, le + // fantôme part avec elle + if (error?.payload?.error === 'contribution_session_already_reviewed') { + await refreshCurrentTreeGraph().catch(() => {}) + await refreshContributionSessions() + } setContribState((current) => ({ ...current, reviewingSessionId: '', diff --git a/frontend/src/i18n/en/contribution.js b/frontend/src/i18n/en/contribution.js index 7adb291..bdc09d8 100644 --- a/frontend/src/i18n/en/contribution.js +++ b/frontend/src/i18n/en/contribution.js @@ -229,4 +229,5 @@ export default { 'Cette photo est trop lourde. Essayez une photo plus petite.': 'This photo is too large. Try a smaller one.', 'Beaucoup de photos attendent déjà la relecture sur cet arbre. Réessayez quand la personne qui le gère les aura vues.': "Many photos are already waiting for review on this tree. Try again once the person who manages it has seen them.", 'Ce fichier n’est pas une photo que Parenthèse sait afficher (JPEG, PNG, WebP ou GIF).': "This file isn't a photo Parenthèse can show (JPEG, PNG, WebP or GIF).", + 'Cette proposition a déjà été relue, peut-être par une autre personne qui gère l’arbre.': 'This suggestion has already been reviewed, maybe by another person who manages the tree.', } diff --git a/frontend/src/utils/errorMessages.js b/frontend/src/utils/errorMessages.js index 1468f02..c00bbb0 100644 --- a/frontend/src/utils/errorMessages.js +++ b/frontend/src/utils/errorMessages.js @@ -64,6 +64,10 @@ export function getAccountErrorMessage(error) { return t('Le format de fichier ne correspond pas au type de média choisi.') } + if (errorCode === 'contribution_session_already_reviewed') { + return t('Cette proposition a déjà été relue, peut-être par une autre personne qui gère l’arbre.') + } + if (errorCode === 'photo_too_large') { return t('Cette photo est trop lourde. Essayez une photo plus petite.') }