mirror of
https://github.com/IliesAllali/parenthese.git
synced 2026-11-14 00:22:03 +00:00
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:
1 parent
e718d48708
commit
ba15fc8745
5 files changed
+33
-7
No files matched your search
+17
-1
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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.",
|
||||
|
||||
Reference in new issue
Block a user