Compte : « Supprimer mon compte » joignable, lien mort sans déconnexion

Avec un arbre, la fenêtre « Mon compte » ne menait nulle part : elle a maintenant « Gérer mon compte », qui ouvre « Vos arbres » (déconnexion, suppression du compte), la croix ramène à l'arbre. Sans arbre, « Mon compte » renvoyait aussitôt à l'assistant de création : le repli vers la démo ne se déclenche plus quand l'utilisateur a ouvert l'écran lui-même. Sur le lien d'un arbre supprimé, la session du compte est restaurée, « Créer mon arbre » ouvre le compte connecté au lieu d'un écran de connexion. Page vie privée alignée sur le chemin réel.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
IliesAllaliandClaude Opus 5.5 committed 2026-09-30 23:22:45 +02:00
1 parent e718d48708
commit ba15fc8745
5 files changed
+33 -7

No files matched your search

+17 -1
View File
@@ -1885,6 +1885,18 @@ function App() {
const notFound = error?.status === 404 || error?.payload?.error === 'tree_not_found'
setTreeNotFound(notFound)
tree.setGateError(notFound ? t("Cet arbre n'existe pas.") : t('Impossible de résoudre ce lien de partage.'))
// Lien mort, mais la session du compte reste valable : « Créer mon arbre » ou « Mon compte »
// doivent ouvrir le compte connecté, pas un écran de connexion vide
const storedUserToken = auth.restoreUserToken()
if (storedUserToken) {
try {
await auth.loadAccountTrees(storedUserToken)
if (!active) return
auth.setUserAuth({ token: storedUserToken, user: auth.restoreUserProfile?.() || null })
} catch {
auth.clearStoredUserToken()
}
}
return
}
}
@@ -2024,19 +2036,22 @@ function App() {
// Fallback auto: si l'utilisateur est connecté mais n'a aucun arbre,
// on bascule automatiquement sur la démo (utile en production quand la création d'account laisse l'UI vide).
// Sauf s'il a ouvert lui-même « Mon compte » : l'écran « Vos arbres » sait afficher un compte vide, et c'est
// là que se trouvent la déconnexion et « Supprimer mon compte » (sans ça, introuvables sans arbre).
useEffect(() => {
if (
tree.bootState === 'account' &&
auth.authenticated &&
!auth.accountLoading &&
auth.accountTrees.length === 0 &&
!accountFromTree &&
!pendingSharedTreeRef.current // retour sur un arbre partagé en cours : pas d'assistant "votre arbre"
) {
handleUseDemo()
setAccountEntryMode('register')
setTreeWizardVisible(true)
}
}, [tree.bootState, auth.authenticated, auth.accountLoading, auth.accountTrees.length]) // eslint-disable-line react-hooks/exhaustive-deps
}, [tree.bootState, auth.authenticated, auth.accountLoading, auth.accountTrees.length, accountFromTree]) // eslint-disable-line react-hooks/exhaustive-deps
const handleUseAccount = (mode = 'login') => {
const ctx = tree.treeContext
@@ -2700,6 +2715,7 @@ function App() {
selectedPersonId={linkedSelfPersonId}
people={persons}
onSelectPerson={handleSelectSelfPerson}
onManageAccount={() => handleUseAccount('login')}
onClose={() => setAccountPanelVisible(false)}
/>
<AdminPanel
+13 -4
View File
@@ -11,6 +11,7 @@ const AccountPanel = ({
selectedPersonId = '',
people = [],
onSelectPerson,
onManageAccount,
onClose,
}) => {
const [query, setQuery] = useState('')
@@ -96,11 +97,19 @@ const AccountPanel = ({
</div>
</div>
{selectedPersonId && (
{(selectedPersonId || onManageAccount) && (
<div className="pz-modal-actions">
<button type="button" className="pz-btn pz-btn--ghost pz-btn--sm" onClick={() => onSelectPerson?.(null)}>
{t("Ce n'est plus moi")}
</button>
{selectedPersonId && (
<button type="button" className="pz-btn pz-btn--ghost pz-btn--sm" onClick={() => onSelectPerson?.(null)}>
{t("Ce n'est plus moi")}
</button>
)}
{/* Vos arbres, déconnexion et suppression du compte : l'écran du compte, joignable d'ici */}
{onManageAccount && (
<button type="button" className="pz-btn pz-btn--ghost pz-btn--sm ap-manage" onClick={onManageAccount}>
{t('Gérer mon compte')}
</button>
)}
</div>
)}
</div>
+1
View File
@@ -73,6 +73,7 @@ export default {
"Personne ne correspond à cette recherche.": "No one matches this search.",
"C'est moi": "That's me",
"Ce n'est plus moi": "That's not me",
'Gérer mon compte': 'Manage my account',
// Paramètres de l'arbre (AdminPanel)
"Impossible de charger les paramètres de cet arbre.": "Couldn't load this tree's settings.",
"Les modifications de la famille sont désormais appliquées directement.": "Changes from the family now go live right away.",