From 2fccf287b3cc5a7b7bf853f14f1e77331b4fd012 Mon Sep 17 00:00:00 2001 From: IliesAllali Date: Fri, 16 Oct 2026 20:06:03 +0200 Subject: [PATCH] =?UTF-8?q?Premi=C3=A8res=20photos=20:=20compter=20chaque?= =?UTF-8?q?=20souvenir=20par=20son=20chemin=20d'origine?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Les correspondances gardent le chemin cité par le logiciel (sourcePath) : plusieurs fichiers d'une même personne ne se confondent plus, le décompte des fichiers ajoutés et restants est juste, et le pied du panneau parle de fichiers quand des documents ont été ajoutés. Co-Authored-By: Claude Opus 5.5 --- frontend/src/components/PhotoStartPanel.jsx | 12 +++++++++--- frontend/src/i18n/en/photos.js | 2 ++ frontend/src/utils/photoImport.js | 2 +- frontend/src/utils/photoImport.test.js | 8 ++++++++ 4 files changed, 20 insertions(+), 4 deletions(-) diff --git a/frontend/src/components/PhotoStartPanel.jsx b/frontend/src/components/PhotoStartPanel.jsx index ed1ac6e..326b7f5 100644 --- a/frontend/src/components/PhotoStartPanel.jsx +++ b/frontend/src/components/PhotoStartPanel.jsx @@ -33,7 +33,8 @@ function folderOf(filePath) { // Après un import GEDCOM (ou depuis les paramètres) : retrouver les photos que le logiciel connaissait, // et demander les premiers visages un par un. -const refKey = (ref) => `${ref.personId}|${ref.file}` +// Une référence et sa correspondance retrouvée partagent le chemin cité par le logiciel +const refKey = (ref) => `${ref.personId}|${ref.sourcePath ?? ref.file}` export default function PhotoStartPanel({ visible, @@ -58,6 +59,7 @@ export default function PhotoStartPanel({ const [faceState, setFaceState] = useState({}) const [shownFaces, setShownFaces] = useState(faces) const [placedTotal, setPlacedTotal] = useState(0) + const [memoriesTotal, setMemoriesTotal] = useState(0) // La liste des visages et les chemins sont figés à l'ouverture : une ligne ne disparaît pas sous le doigt useEffect(() => { @@ -69,6 +71,7 @@ export default function PhotoStartPanel({ setFaceState({}) setShownFaces(faces) setPlacedTotal(0) + setMemoriesTotal(0) }, [visible]) // eslint-disable-line react-hooks/exhaustive-deps useEffect(() => { @@ -132,7 +135,8 @@ export default function PhotoStartPanel({ setRemaining(nextRemaining) onRefsChange?.(nextRemaining) setFound(null) - setPlacedTotal((n) => n + placedIds.size + addedKeys.size) + setPlacedTotal((n) => n + placedIds.size) + setMemoriesTotal((n) => n + addedKeys.size) setBulk({ running: false, done: total, total, placed: placedIds.size, added: addedKeys.size, failed: total - placedIds.size - addedKeys.size }) } @@ -318,7 +322,9 @@ export default function PhotoStartPanel({

- {addedCount > 0 ? plural(addedCount, '1 photo ajoutée.', '{n} photos ajoutées.') : t('Vous pourrez en ajouter plus tard depuis chaque fiche.')} + {memoriesTotal > 0 + ? plural(addedCount + memoriesTotal, '1 fichier ajouté.', '{n} fichiers ajoutés.') + : addedCount > 0 ? plural(addedCount, '1 photo ajoutée.', '{n} photos ajoutées.') : t('Vous pourrez en ajouter plus tard depuis chaque fiche.')}