import { useState } from 'react'; import { useNavigate } from 'react-router-dom'; import { Dialog } from '@/components/ui/dialog'; import { Button } from '@/components/ui/button'; import { useUI } from '@/stores/ui'; import { useAuth } from '@/stores/auth'; import { api, setToken } from '@/lib/api'; export function SettingsDialog() { const { settingsOpen, setSettings } = useUI(); const { user, updatePrefs } = useAuth(); const nav = useNavigate(); const [busy, setBusy] = useState(false); const [cur, setCur] = useState(''); const [nw, setNw] = useState(''); const [pwMsg, setPwMsg] = useState(null); if (!user) return null; const p = user.preferences; const purge = async () => { if (!confirm('Supprimer définitivement toutes tes conversations, fichiers et ton compte ? Cette action est irréversible.')) return; setBusy(true); try { await api('/me', { method: 'DELETE' }); setToken(null); useAuth.setState({ user: null }); nav('/connexion'); } finally { setBusy(false); setSettings(false); } }; const Row = ({ label, children, hint }: { label: string; hint?: string; children: React.ReactNode }) => (
{label}
{hint &&
{hint}
}
{children}
); return ( e.target.value !== user.display_name && updatePrefs({ display_name: e.target.value })} className="h-11 w-44 rounded-xl border border-neutral-line px-3 text-sm" /> updatePrefs({ deep: e.target.checked })} className="h-5 w-5 accent-uqo-blue" />
{[0.9, 1, 1.15, 1.3].map((v) => ( ))}
{user.has_password ? 'Changer mon mot de passe' : 'Définir un mot de passe'}

Tu te connectes avec ton courriel et ce mot de passe. Oublié ? Utilise « Première connexion ou mot de passe oublié » sur la page de connexion.

{user.has_password && setCur(e.target.value)} placeholder="Mot de passe actuel" autoComplete="current-password" className="h-11 rounded-xl border border-neutral-line px-3" />} setNw(e.target.value)} placeholder="Nouveau mot de passe (≥ 8)" autoComplete="new-password" className="h-11 rounded-xl border border-neutral-line px-3" />
{pwMsg && {pwMsg}}
Vie privée (Loi 25)

Tes conversations sont conservées 12 mois puis anonymisées ; les fichiers 7 jours (30 si épinglés). Aucune donnée n'est vendue ni utilisée pour entraîner des modèles. Politique complète.

); }