mirror of
https://github.com/IliesAllali/parenthese.git
synced 2026-11-13 08:22:03 +00:00
Merge pull request #91 from IliesAllali/fix/fiche-saisie-par-personne
Fiche : une date en cours ne passe plus sur la personne suivante
This commit is contained in:
1 file changed
+20
-9
@@ -16,6 +16,9 @@ import { firstNameLabel, fullNameLabel, isFirstNameUnknown } from '../utils/pers
|
||||
import { isYearOnly } from '../utils/dateInput.js'
|
||||
import DateField from './DateField.jsx'
|
||||
|
||||
// Aucune modification en cours (référence stable)
|
||||
const NO_EDITS = Object.freeze({})
|
||||
|
||||
const TYPE_LABELS = {
|
||||
photo: t('Photo'),
|
||||
video: t('Vidéo'),
|
||||
@@ -93,12 +96,16 @@ const PersonCard = ({
|
||||
}
|
||||
}, [tab, person.id, treeId, immichToken, lifeRevision])
|
||||
|
||||
// État local pour les modifications en mode édition
|
||||
const [edits, setEdits] = useState({})
|
||||
// Modifications en cours, rattachées à la personne qu'elles concernent. Au changement de fiche,
|
||||
// le premier rendu ne doit pas voir celles de la personne d'avant : un champ qui s'initialise à
|
||||
// ce moment-là (DateField) les garderait, et la date d'une personne passait sur une autre.
|
||||
const [editState, setEditState] = useState(() => ({ personId: person.id, values: {}, changed: false }))
|
||||
const ownEdits = editState.personId === person.id
|
||||
const edits = ownEdits ? editState.values : NO_EDITS
|
||||
const hasChanges = ownEdits && editState.changed
|
||||
// Prénom inconnu (case cochée) et saisie de prénom vide sans case : le prénom est demandé avant l'enregistrement
|
||||
const [unknownFirstName, setUnknownFirstName] = useState(() => isFirstNameUnknown(person))
|
||||
const [firstNameMissing, setFirstNameMissing] = useState(false)
|
||||
const [hasChanges, setHasChanges] = useState(false)
|
||||
const [saving, setSaving] = useState(false)
|
||||
const [saveSuccess, setSaveSuccess] = useState(false)
|
||||
const [showDeleteConfirm, setShowDeleteConfirm] = useState(false)
|
||||
@@ -119,10 +126,9 @@ const PersonCard = ({
|
||||
|
||||
// Reset edits quand la personne change
|
||||
useEffect(() => {
|
||||
setEdits({})
|
||||
setEditState({ personId: person.id, values: {}, changed: false })
|
||||
setUnknownFirstName(isFirstNameUnknown(person))
|
||||
setFirstNameMissing(false)
|
||||
setHasChanges(false)
|
||||
setShowDeleteConfirm(false)
|
||||
setActiveRelationSearch(null)
|
||||
setRelationSearchQuery('')
|
||||
@@ -199,8 +205,12 @@ const PersonCard = ({
|
||||
}
|
||||
|
||||
const handleFieldChange = (field, value) => {
|
||||
setEdits(prev => ({ ...prev, [field]: value }))
|
||||
setHasChanges(true)
|
||||
const personId = person.id
|
||||
setEditState(prev => ({
|
||||
personId,
|
||||
values: { ...(prev.personId === personId ? prev.values : {}), [field]: value },
|
||||
changed: true,
|
||||
}))
|
||||
}
|
||||
|
||||
const handleSave = async () => {
|
||||
@@ -211,8 +221,9 @@ const PersonCard = ({
|
||||
}
|
||||
setSaving(true)
|
||||
try {
|
||||
await onSave(person.id, edits)
|
||||
setHasChanges(false)
|
||||
const savedFor = person.id
|
||||
await onSave(savedFor, edits)
|
||||
setEditState(prev => (prev.personId === savedFor ? { ...prev, changed: false } : prev))
|
||||
setSaveSuccess(true)
|
||||
setTimeout(() => setSaveSuccess(false), 2000)
|
||||
} finally {
|
||||
|
||||
Reference in new issue
Block a user