diff --git a/apps/mail/components/create/email-composer.tsx b/apps/mail/components/create/email-composer.tsx index db42e6e70..1c829c684 100644 --- a/apps/mail/components/create/email-composer.tsx +++ b/apps/mail/components/create/email-composer.tsx @@ -906,26 +906,6 @@ function EmailComposerBase({
- -
{aiGeneratedMessage !== null ? ( @@ -949,32 +929,6 @@ function EmailComposerBase({ /> ) : null} -
- - +
@@ -109,10 +111,10 @@ export const ScheduleSendPicker: React.FC = ({ type="datetime-local" value={displayValue} onChange={handleChange} - className="w-full rounded-md border border-input bg-background px-3 py-2 text-sm ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:opacity-0" + className="border-input bg-background ring-offset-background placeholder:text-muted-foreground focus-visible:ring-ring w-full rounded-md border px-3 py-2 text-sm file:border-0 file:bg-transparent file:text-sm file:font-medium focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 [&::-webkit-calendar-picker-indicator]:hidden [&::-webkit-calendar-picker-indicator]:opacity-0" />
); -}; \ No newline at end of file +}; diff --git a/apps/mail/components/create/template-button.tsx b/apps/mail/components/create/template-button.tsx index 55bb5f861..e0fdee4ab 100644 --- a/apps/mail/components/create/template-button.tsx +++ b/apps/mail/components/create/template-button.tsx @@ -1,7 +1,3 @@ -import { useTemplates } from '@/hooks/use-templates'; -import { useTRPC } from '@/providers/query-provider'; -import { Editor } from '@tiptap/react'; -import { Button } from '@/components/ui/button'; import { DropdownMenu, DropdownMenuContent, @@ -11,10 +7,6 @@ import { DropdownMenuSubTrigger, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; -import { toast } from 'sonner'; -import { useMutation, useQueryClient } from '@tanstack/react-query'; -import { FileText, Save, Trash2 } from 'lucide-react'; -import React, { useState, useMemo, useDeferredValue, useCallback, startTransition } from 'react'; import { Dialog, DialogContent, @@ -22,8 +14,16 @@ import { DialogHeader, DialogTitle, } from '@/components/ui/dialog'; -import { Input } from '@/components/ui/input'; +import React, { useState, useMemo, useDeferredValue, useCallback, startTransition } from 'react'; +import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { FileText, Save, Trash2 } from 'lucide-react'; +import { useTRPC } from '@/providers/query-provider'; +import { useTemplates } from '@/hooks/use-templates'; +import { Button } from '@/components/ui/button'; import { TRPCClientError } from '@trpc/client'; +import { Input } from '@/components/ui/input'; +import { Editor } from '@tiptap/react'; +import { toast } from 'sonner'; type RecipientField = 'to' | 'cc' | 'bcc'; @@ -37,9 +37,11 @@ type Template = { bcc?: string[] | null; }; -type TemplatesQueryData = { - templates: Template[]; -} | undefined; +type TemplatesQueryData = + | { + templates: Template[]; + } + | undefined; interface TemplateButtonProps { editor: Editor | null; @@ -63,7 +65,7 @@ const TemplateButtonComponent: React.FC = ({ const trpc = useTRPC(); const queryClient = useQueryClient(); const { data } = useTemplates(); - + const templates: Template[] = data?.templates ?? []; const [menuOpen, setMenuOpen] = useState(false); @@ -76,9 +78,7 @@ const TemplateButtonComponent: React.FC = ({ const filteredTemplates = useMemo(() => { if (!deferredSearch.trim()) return templates; - return templates.filter((t) => - t.name.toLowerCase().includes(deferredSearch.toLowerCase()), - ); + return templates.filter((t) => t.name.toLowerCase().includes(deferredSearch.toLowerCase())); }, [deferredSearch, templates]); const { mutateAsync: createTemplate } = useMutation(trpc.templates.create.mutationOptions()); @@ -123,16 +123,19 @@ const TemplateButtonComponent: React.FC = ({ } }; - const handleApplyTemplate = useCallback((template: Template) => { - if (!editor) return; - startTransition(() => { - if (template.subject) setSubject(template.subject); - if (template.body) editor.commands.setContent(template.body, false); - if (template.to) setRecipients('to', template.to); - if (template.cc) setRecipients('cc', template.cc); - if (template.bcc) setRecipients('bcc', template.bcc); - }); - }, [editor, setSubject, setRecipients]); + const handleApplyTemplate = useCallback( + (template: Template) => { + if (!editor) return; + startTransition(() => { + if (template.subject) setSubject(template.subject); + if (template.body) editor.commands.setContent(template.body, false); + if (template.to) setRecipients('to', template.to); + if (template.cc) setRecipients('cc', template.cc); + if (template.bcc) setRecipients('bcc', template.bcc); + }); + }, + [editor, setSubject, setRecipients], + ); const handleDeleteTemplate = useCallback( async (templateId: string) => { @@ -157,7 +160,13 @@ const TemplateButtonComponent: React.FC = ({ <> - @@ -177,7 +186,7 @@ const TemplateButtonComponent: React.FC = ({ Use template -
+
= ({ > {t.name}
@@ -231,7 +240,7 @@ const TemplateButtonComponent: React.FC = ({ Save as Template -
+
= ({ />
-