(null)
-
- useEffect(() => {
- let active = true
- api
- .getMessage()
- .then((res) => {
- if (active) setMessages(res.messages)
- })
- .catch((err) => {
- if (active) {
- setError(err instanceof ApiError ? err.message : 'Erreur lors du chargement des messages.')
- }
- })
- .finally(() => {
- if (active) setLoading(false)
- })
- return () => {
- active = false
- }
- }, [])
-
- if (loading) {
- return (
-
-
-
- )
- }
-
- if (error) {
- return (
-
-
- {error}
-
- )
- }
-
- return (
-
-
- Messages de contact
- {messages.length} message(s) reçu(s)
-
-
- {messages.length === 0 ? (
-
- Aucun message pour le moment.
-
- ) : (
-
-
-
-
- | Nom |
- Telegram |
- Sujet |
- Message |
- Reçu le |
-
-
-
- {messages.map((m) => (
-
- | {m.username} |
-
- {m.telegram}
- |
- {m.sujet} |
-
- {m.message}
- |
-
- {new Date(m.created_at).toLocaleString('fr-FR')}
- |
-
- ))}
-
-
-
- )}
-
- )
-}
diff --git a/web/src/pages/backoffice/Leads.tsx b/web/src/pages/backoffice/Leads.tsx
index 9ce6ad7..5de6f21 100644
--- a/web/src/pages/backoffice/Leads.tsx
+++ b/web/src/pages/backoffice/Leads.tsx
@@ -74,6 +74,7 @@ export function Leads() {
| Telegram |
Statut |
+ Message |
Reçu le |
|
@@ -85,6 +86,7 @@ export function Leads() {
{l.status}
|
+ {l.message} |
{formatDate(l.created_at)} |
{isAdmin && (
diff --git a/web/src/pages/backoffice/Profile.tsx b/web/src/pages/backoffice/Profile.tsx
index c5976db..a899de3 100644
--- a/web/src/pages/backoffice/Profile.tsx
+++ b/web/src/pages/backoffice/Profile.tsx
@@ -101,12 +101,19 @@ export function Profile() {
const [updatingUsername, setUpdatingUsername] = useState(false)
const [updatingPassword, setUpdatingPassword] = useState(false)
const [passwordVersion, setPasswordVersion] = useState(0)
+ const [telegram, setTelegramState] = useState('')
+ const [updatingTelegram, setUpdatingTelegram] = useState(false)
+ const [addingTelegram, setAddingTelegram] = useState(false)
+
useEffect(() => {
let cancelled = false
;(async () => {
try {
- const res = await api.me()
- if (!cancelled) setMe(res)
+ const [meRes, tgRes] = await Promise.all([api.me(), api.getTelegram()])
+ if (!cancelled) {
+ setMe(meRes)
+ setTelegramState(tgRes.telegram ?? '')
+ }
} catch (err) {
if (err instanceof ApiError && err.status === 401) {
navigate('/login')
@@ -117,9 +124,7 @@ export function Profile() {
if (!cancelled) setLoading(false)
}
})()
- return () => {
- cancelled = true
- }
+ return () => { cancelled = true }
}, [navigate, toast])
const handleUpdateUsername = async (newUsername: string) => {
@@ -175,7 +180,32 @@ export function Profile() {
setPasswordVersion(v => v + 1) // vide le champ après tentative
}
}
-
+ const handleUpdateTelegram = async (newTelegram: string) => {
+ const trimmed = newTelegram.trim()
+ if (!trimmed) {
+ setAddingTelegram(false)
+ return
+ }
+ setUpdatingTelegram(true)
+ try {
+ const res = await api.setTelegram(trimmed)
+ setTelegramState(res.telegram)
+ setAddingTelegram(false)
+ toast({ status: 'success', title: 'Telegram enregistré' })
+ } catch (err) {
+ if (err instanceof ApiError && err.status === 401) {
+ navigate('/login')
+ return
+ }
+ toast({
+ status: 'error',
+ title: "Impossible d'enregistrer le Telegram",
+ description: err instanceof ApiError ? err.message : undefined,
+ })
+ } finally {
+ setUpdatingTelegram(false)
+ }
+ }
const handleLogout = async () => {
setLoggingOut(true)
try {
@@ -285,7 +315,44 @@ export function Profile() {
-
+
+ Telegram
+ {telegram ? (
+
+
+
+
+
+
+
+ ) : addingTelegram ? (
+ setAddingTelegram(false)}
+ isDisabled={updatingTelegram}
+ submitOnBlur={false}
+ >
+
+
+
+
+
+
+ ) : (
+
+ )}
+
Expire le
{formatDate(me.expired_at)}
|