+ )}
+
+ {/* Modal erreur */}
+ {showErrorModal && (
+
setShowErrorModal(false)}>
+
e.stopPropagation()}>
+
-
- {modal.type === 'error'
- ?
- :
- }
+
-
- {modal.type === 'error' ? 'Erreur' : 'Succès'}
-
-
{modal.message}
-
diff --git a/frontend-prep/src/pages/User/ProfilePage.css b/frontend-prep/src/pages/User/ProfilePage.css
index 446f0d31..fec5c0d8 100644
--- a/frontend-prep/src/pages/User/ProfilePage.css
+++ b/frontend-prep/src/pages/User/ProfilePage.css
@@ -375,3 +375,9 @@
border-color: rgba(16, 185, 129, 0.3);
color: #10b981;
}
+
+.profile-modal-btn--success {
+ background: transparent;
+ border: 1px solid rgba(16, 185, 129, 0.4);
+ color: #10b981;
+}
diff --git a/frontend-prep/src/pages/User/ProfilePage.tsx b/frontend-prep/src/pages/User/ProfilePage.tsx
index 94fc38a9..04e24b58 100644
--- a/frontend-prep/src/pages/User/ProfilePage.tsx
+++ b/frontend-prep/src/pages/User/ProfilePage.tsx
@@ -27,11 +27,14 @@ export default function ProfilePage() {
const [defaultPhone, setDefaultPhone] = useState(() => localStorage.getItem(STORAGE_PHONE) ?? '');
const [signalPseudo, setSignalPseudo] = useState(() => localStorage.getItem(STORAGE_SIGNAL) ?? '');
- // Feedback
const [savingContact, setSavingContact] = useState(false);
- const [feedbackModal, setFeedbackModal] = useState<{
- show: boolean; type: 'success' | 'error'; title: string; body: string;
- }>({ show: false, type: 'success', title: '', body: '' });
+
+ // Modals succès / erreur (pattern identique à l'app mobile)
+ const [showSuccessModal, setShowSuccessModal] = useState(false);
+ const [successTitle, setSuccessTitle] = useState('');
+ const [successMsg, setSuccessMsg] = useState('');
+ const [showErrorModal, setShowErrorModal] = useState(false);
+ const [errorMsg, setErrorMsg] = useState('');
// Telegram
const [tgLinked, setTgLinked] = useState(false);
@@ -79,13 +82,16 @@ export default function ProfilePage() {
});
}, [navigate]);
- const showFeedback = (type: 'success' | 'error', title: string, body: string) => {
- setFeedbackModal({ show: true, type, title, body });
+ const showSuccess = (title: string, msg: string) => {
+ setSuccessTitle(title); setSuccessMsg(msg); setShowSuccessModal(true);
+ };
+ const showError = (msg: string) => {
+ setErrorMsg(msg); setShowErrorModal(true);
};
const saveAddress = () => {
localStorage.setItem(STORAGE_ADDRESS, defaultAddress.trim());
- showFeedback('success', 'Adresse enregistrée', 'Votre adresse par défaut a été sauvegardée et sera pré-remplie à votre prochaine commande.');
+ showSuccess('Adresse enregistrée', 'Votre adresse par défaut a été sauvegardée et sera pré-remplie à votre prochaine commande.');
};
const saveLocal = () => {
@@ -93,7 +99,7 @@ export default function ProfilePage() {
localStorage.setItem(STORAGE_PHONE, defaultPhone.trim());
localStorage.setItem(STORAGE_SIGNAL, signalPseudo.trim());
setShowSaveModal(false);
- showFeedback('success', 'Infos enregistrées', 'Adresse, téléphone et pseudo Signal sauvegardés. Ils seront pré-remplis à votre prochaine commande.');
+ showSuccess('Infos enregistrées', 'Adresse, téléphone et pseudo Signal sauvegardés. Ils seront pré-remplis à votre prochaine commande.');
};
const handleLinkTelegram = async () => {
@@ -101,7 +107,7 @@ export default function ProfilePage() {
const res = await generateTelegramLinkToken();
setTgLoading(false);
if (res.error || !res.link_url) {
- showFeedback('error', 'Telegram indisponible', res.error || 'Service Telegram non disponible');
+ showError(res.error || 'Service Telegram non disponible');
return;
}
window.open(res.link_url, '_blank');
@@ -126,9 +132,9 @@ export default function ProfilePage() {
setTwoFALoading(false);
if (res.success) {
setTwoFAEnabled(newVal);
- showFeedback('success', newVal ? '2FA activée' : '2FA désactivée', newVal ? 'La double authentification est maintenant active. Un code vous sera envoyé sur Telegram à chaque connexion.' : 'La double authentification a été désactivée.');
+ showSuccess(newVal ? '2FA activée' : '2FA désactivée', newVal ? 'Un code vous sera envoyé sur Telegram à chaque connexion.' : 'La double authentification a été désactivée.');
} else {
- showFeedback('error', 'Erreur', res.error || 'Erreur lors de la modification');
+ showError(res.error || 'Erreur lors de la modification');
}
};
@@ -137,9 +143,9 @@ export default function ProfilePage() {
const res = await updateMyProfile({ nom: nom.trim(), prenom: prenom.trim(), telephone: telephone.trim() });
setSavingContact(false);
if (res.success) {
- showFeedback('success', 'Profil mis à jour', 'Vos informations de compte ont été enregistrées avec succès.');
+ showSuccess('Profil mis à jour', 'Vos informations de compte ont été enregistrées avec succès.');
} else {
- showFeedback('error', 'Erreur', res.message ?? 'Erreur lors de la mise à jour du profil.');
+ showError(res.message ?? 'Erreur lors de la mise à jour du profil.');
}
};
@@ -386,23 +392,42 @@ export default function ProfilePage() {