"use client" import { useCallback, useState } from "react" import { Check, Copy } from "lucide-react" import { toast } from "sonner" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Switch } from "@/components/ui/switch" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { AutomationTabMasonry } from "@/components/gmail/settings/automation/automation-tab-masonry" import { OrgSettingsSection } from "@/components/admin/settings/org-settings-form" import { MigrationProjectsPanel } from "@/components/admin/settings/sections/migration-projects-panel" import { useOrgSettingsStore } from "@/lib/admin-settings/org-settings-store" import { useCreateMailDomain, useMailDomains, useVerifyMailDomainMX, useVerifyMailDomainTXT, } from "@/lib/api/hooks/use-hosted-mail" export function MailDomainsSection() { const domainsQuery = useMailDomains() const createDomain = useCreateMailDomain() const [domainName, setDomainName] = useState("") const mailing = useOrgSettingsStore((s) => s.mailing) const setMailing = useOrgSettingsStore((s) => s.setMailing) const domains = domainsQuery.data?.domains ?? [] return (
Domaines hébergés Vérification DNS, DKIM et provisioning des boîtes @domaine.
setDomainName(e.target.value)} placeholder="entreprise.com" />
    {domains.map((domain) => ( ))}
Notifications suite (SMTP) Partages de fichiers, mentions, invitations — distinct des comptes mail utilisateur.
setMailing({ enabled })} />
setMailing({ smtp_host: e.target.value })} placeholder="smtp.example.com" />
setMailing({ smtp_port: Number(e.target.value) || 587 })} />
setMailing({ smtp_user: e.target.value })} />
setMailing({ smtp_password: e.target.value })} />
setMailing({ from_email: e.target.value })} />
setMailing({ from_name: e.target.value })} />
setMailing({ reply_to: e.target.value })} />
) } function CopyTxtButton({ label, copied, onCopy, }: { label: string copied: boolean onCopy: () => void }) { return ( ) } function DomainRow({ domain, }: { domain: { id: string name: string status: string verification_token?: string is_platform_domain: boolean } }) { const verifyTxt = useVerifyMailDomainTXT(domain.id) const verifyMx = useVerifyMailDomainMX(domain.id) const [copiedField, setCopiedField] = useState<"name" | "value" | null>(null) const txtName = `_ultisuite-verify.${domain.name}` const copyTxtField = useCallback(async (text: string, field: "name" | "value", successLabel: string) => { try { await navigator.clipboard.writeText(text) setCopiedField(field) toast.success(successLabel) window.setTimeout(() => setCopiedField(null), 2000) } catch { toast.error("Impossible de copier") } }, []) return (
  • {domain.name} {domain.is_platform_domain ? " (plateforme)" : ""}

    Statut : {domain.status}

    {domain.verification_token && (

    Enregistrement TXT :

    {txtName} void copyTxtField(txtName, "name", "Nom TXT copié")} /> = {domain.verification_token} void copyTxtField(domain.verification_token!, "value", "Valeur TXT copiée") } />
    )}
  • ) }