diff --git a/VERSION b/VERSION new file mode 100644 index 0000000..13d71a7 --- /dev/null +++ b/VERSION @@ -0,0 +1 @@ +v11-1777031516 diff --git a/client/src/App.tsx b/client/src/App.tsx index da8cc0a..b22d699 100644 --- a/client/src/App.tsx +++ b/client/src/App.tsx @@ -14,6 +14,8 @@ import LoginLocal from "./pages/LoginLocal"; import MesSolutions from "./pages/MesSolutions"; import SolutionsLogicielles from "./pages/SolutionsLogicielles"; import Statistiques from "./pages/Statistiques"; +import MesEchanges from "./pages/MesEchanges"; +import MiseEnRelation from "./pages/MiseEnRelation"; function Router() { return ( @@ -31,6 +33,8 @@ function Router() { + + {/* Fallback */} diff --git a/client/src/components/ContactModal.tsx b/client/src/components/ContactModal.tsx index 59b65e9..2ccf905 100644 --- a/client/src/components/ContactModal.tsx +++ b/client/src/components/ContactModal.tsx @@ -1,5 +1,5 @@ import { trpc } from "@/lib/trpc"; -import { Building2, Mail, Send, X } from "lucide-react"; +import { Building2, Mail, MessageSquare, Send, X } from "lucide-react"; import { useState } from "react"; import { toast } from "sonner"; @@ -9,87 +9,158 @@ interface ContactModalProps { onClose: () => void; } +type Mode = "choix" | "email" | "canal"; + export default function ContactModal({ etablissementId, etablissementNom, onClose }: ContactModalProps) { + const [mode, setMode] = useState("choix"); const [message, setMessage] = useState(""); - const sendMutation = trpc.contact.envoyer.useMutation({ + const sendEmailMutation = trpc.contact.envoyer.useMutation({ onSuccess: () => { - toast.success("Votre demande de contact a été envoyée avec succès."); + toast.success("Votre demande a été transmise au référent numérique par email."); onClose(); }, - onError: (err) => { - toast.error("Erreur lors de l'envoi : " + err.message); - }, + onError: (err) => toast.error("Erreur lors de l'envoi : " + err.message), }); - const handleSubmit = (e: React.FormEvent) => { + const createCanalMutation = trpc.canaux.create.useMutation({ + onSuccess: () => { + toast.success("Un canal de discussion a été ouvert. Retrouvez-le dans « Mes Échanges »."); + onClose(); + }, + onError: (err) => toast.error("Erreur : " + err.message), + }); + + const etabQuery = trpc.etablissements.byId.useQuery({ id: etablissementId }); + const referentId = etabQuery.data?.referentId; + + const handleSubmitEmail = (e: React.FormEvent) => { e.preventDefault(); if (!message.trim()) return; - sendMutation.mutate({ etablissementCibleId: etablissementId, message }); + sendEmailMutation.mutate({ etablissementCibleId: etablissementId, message }); + }; + + const handleSubmitCanal = (e: React.FormEvent) => { + e.preventDefault(); + if (!message.trim()) return; + const membreIds = referentId ? [referentId] : []; + createCanalMutation.mutate({ + titre: `Contact — ${etablissementNom}`, + description: message, + type: "contact_referent", + visibilite: "prive", + etablissementId, + membreIds, + }); }; return (
- {/* En-tête */}
-

Demande de contact

+

Contacter le référent numérique

{etablissementNom}
-
- {/* Formulaire */} -
-
- -