"use client" import { useMemo, useState } from "react" import { PenLine, Plus, Trash2 } from "lucide-react" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "@/components/ui/card" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue, } from "@/components/ui/select" import { SettingsSectionHeader } from "@/components/gmail/settings/settings-section-header" import { SettingsSyncBanner } from "@/components/gmail/settings/settings-sync-banner" import { MAIL_SETTINGS_PAGE_MASONRY_CLASS, MAIL_SETTINGS_PAGE_MASONRY_ITEM_CLASS, } from "@/lib/mail-chrome-classes" import { cn } from "@/lib/utils" import { useAuthReady } from "@/lib/api/use-auth-ready" import { useMailAccounts } from "@/lib/api/hooks/use-mail-queries" import { useIdentities } from "@/lib/api/hooks/use-folder-label-queries" import { useCreateMailSignature, useDeleteMailSignature, useMailSignatures, useUpdateMailSignature, } from "@/lib/api/hooks/use-mail-signatures" import { useUpdateIdentity } from "@/lib/api/hooks/use-identity-mutations" import type { ApiIdentity, ApiMailSignature } from "@/lib/api/types" const NONE_SIGNATURE = "__none__" export function SignaturesSettingsSection() { const { ready, authenticated } = useAuthReady() const { data: signatures = [], isFetching, isError, refetch, isPending, } = useMailSignatures() const showInitialLoad = ready && authenticated && isPending && signatures.length === 0 return ( <> refetch()} />
) } function SignatureLibrary({ signatures, showInitialLoad, }: { signatures: ApiMailSignature[] showInitialLoad: boolean }) { const createSignature = useCreateMailSignature() const updateSignature = useUpdateMailSignature() const deleteSignature = useDeleteMailSignature() const [showAddForm, setShowAddForm] = useState(false) const [draft, setDraft] = useState({ name: "", html: "" }) function handleCreate() { const name = draft.name.trim() if (!name) return createSignature.mutate( { name, html: draft.html }, { onSuccess: () => { setShowAddForm(false) setDraft({ name: "", html: "" }) }, } ) } return ( Bibliothèque Créez des signatures nommées que vous pourrez réutiliser sur plusieurs identités. {showInitialLoad ? null : signatures.length === 0 ? (

Aucune signature enregistrée.

) : (
    {signatures.map((signature) => (
  • { const next = e.target.value.trim() if (!next || next === signature.name) return updateSignature.mutate({ signatureId: signature.id, name: next, html: signature.html, }) }} />