import { trpc as trpcReact } from '@documenso/trpc/react'; import { DOCUMENT_TITLE_MAX_LENGTH } from '@documenso/trpc/server/document-router/schema'; import { Button } from '@documenso/ui/primitives/button'; import { Dialog, DialogContent, DialogFooter, DialogHeader, DialogTitle } from '@documenso/ui/primitives/dialog'; import { Input } from '@documenso/ui/primitives/input'; import { Label } from '@documenso/ui/primitives/label'; import { useToast } from '@documenso/ui/primitives/use-toast'; import { Trans, useLingui } from '@lingui/react/macro'; import { useEffect, useState } from 'react'; export type EnvelopeRenameDialogProps = { id: string; initialTitle: string; open: boolean; onOpenChange: (_open: boolean) => void; onSuccess?: () => Promise; envelopeType?: 'document' | 'template'; }; export const EnvelopeRenameDialog = ({ id, initialTitle, open, onOpenChange, onSuccess, envelopeType = 'document', }: EnvelopeRenameDialogProps) => { const { toast } = useToast(); const { t } = useLingui(); const [title, setTitle] = useState(initialTitle); useEffect(() => { if (open) { setTitle(initialTitle); } }, [open, initialTitle]); const isTemplate = envelopeType === 'template'; const { mutate: updateEnvelope, isPending } = trpcReact.envelope.update.useMutation({ onSuccess: async () => { await onSuccess?.(); toast({ title: isTemplate ? t`Template Renamed` : t`Document Renamed`, description: isTemplate ? t`Your template has been successfully renamed.` : t`Your document has been successfully renamed.`, duration: 5000, }); onOpenChange(false); }, onError: () => { toast({ description: t`Something went wrong. Please try again.`, variant: 'destructive', duration: 7500, }); }, }); const trimmedTitle = title.trim(); const onRename = () => { if (!trimmedTitle || trimmedTitle === initialTitle) { onOpenChange(false); return; } updateEnvelope({ envelopeId: id, data: { title: trimmedTitle, }, }); }; return ( !isPending && onOpenChange(value)}> {isTemplate ? Rename Template : Rename Document}
setTitle(e.target.value)} disabled={isPending} maxLength={DOCUMENT_TITLE_MAX_LENGTH} className="w-full" autoFocus />
); };