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.",
@@ -100,7 +100,7 @@
<li><strong>Consulter.</strong> Tout ce que Parenthèse sait de votre arbre est dans l'application.</li>
<li><strong>Exporter.</strong> Paramètres de l'arbre, section Données, bouton « Télécharger .ged ». Le fichier GEDCOM est un standard que lisent les autres logiciels d'arbre généalogique. Il contient les personnes et leurs liens, pas les fichiers médias.</li>
<li><strong>Supprimer un arbre.</strong> Paramètres de l'arbre, Paramètres avancés, « Supprimer cet arbre ». L'arbre disparaît aussitôt pour tout le monde, propriétaire compris. Il est effacé définitivement, personnes, liens, médias, contributions et journal, en base comme sur le disque. Seules les sauvegardes le gardent encore, 14 jours au plus.</li>
<li><strong>Supprimer votre compte.</strong> Écran « Votre compte », bouton « Supprimer mon compte », puis votre mot de passe pour confirmer. Votre compte et les arbres que vous avez créés sont effacés définitivement, avec leurs médias. Les arbres des autres familles auxquels vous aviez accès restent à leurs propriétaires. Vos contributions y sont conservées, anonymisées, sans votre nom ni votre adresse email. Toutes vos sessions sont fermées, sur tous vos appareils.</li>
<li><strong>Supprimer votre compte.</strong> Menu du compte, « Mon compte » puis « Gérer mon compte », bouton « Supprimer mon compte », puis votre mot de passe pour confirmer. Votre compte et les arbres que vous avez créés sont effacés définitivement, avec leurs médias. Les arbres des autres familles auxquels vous aviez accès restent à leurs propriétaires. Vos contributions y sont conservées, anonymisées, sans votre nom ni votre adresse email. Toutes vos sessions sont fermées, sur tous vos appareils.</li>
<li><strong>Liste d'attente.</strong> Elle est fermée. Si vous vous étiez inscrit avant l'ouverture, votre email, votre prénom et la page d'origine sont encore conservés en base et chez Resend, le prestataire qui a envoyé la confirmation. Un email suffit pour les retirer.</li>
<li><strong>Réclamation.</strong> Si vous estimez que vos droits ne sont pas respectés, vous pouvez saisir la <a href="https://www.cnil.fr/" rel="noopener">CNIL</a>.</li>
</ul>
+1 -1
View File
@@ -100,7 +100,7 @@
<li><strong>View.</strong> Everything Parenthèse knows about your tree is in the app.</li>
<li><strong>Export.</strong> Tree settings, Data section, “Download .ged” button. GEDCOM is a standard file format that other family tree software can read. It contains the people and their links, not the media files.</li>
<li><strong>Delete a tree.</strong> Tree settings, Advanced tab, “Delete this tree”. The tree disappears right away for everyone, the owner included. It is permanently erased (people, links, media, contributions and log) from the database as well as from the disk. Only the backups still hold it, for 14 days at most.</li>
<li><strong>Delete your account.</strong> “My account” screen, “Delete my account” button, then your password to confirm. Your account and the trees you created are permanently erased, along with their media. Other families' trees that you had access to stay with their owners. Your contributions to them are kept, anonymized, without your name or your email address. All your sessions are closed, on all your devices.</li>
<li><strong>Delete your account.</strong> Account menu, “My account” then “Manage my account”, “Delete my account” button, then your password to confirm. Your account and the trees you created are permanently erased, along with their media. Other families' trees that you had access to stay with their owners. Your contributions to them are kept, anonymized, without your name or your email address. All your sessions are closed, on all your devices.</li>
<li><strong>Waiting list.</strong> It is closed. If you signed up before the launch, your email, your first name and the page you signed up from are still stored in the database and at Resend, the service provider that sent the confirmation. Just send an email to have them removed.</li>
<li><strong>Complaints.</strong> If you believe your rights are not being respected, you can file a complaint with the <a href="https://www.cnil.fr/" rel="noopener">CNIL</a>, France's data protection authority.</li>
</ul>