'use client'; import { useRouter } from 'next/navigation'; import { zodResolver } from '@hookform/resolvers/zod'; import { Trans, msg } from '@lingui/macro'; import { useLingui } from '@lingui/react'; import { format } from 'date-fns'; import { Calendar as CalendarIcon } from 'lucide-react'; import { useForm } from 'react-hook-form'; import * as z from 'zod'; import { trpc } from '@documenso/trpc/react'; import { Button } from '@documenso/ui/primitives/button'; import { Calendar } from '@documenso/ui/primitives/calendar'; import { Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '@documenso/ui/primitives/dialog'; import { Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, } from '@documenso/ui/primitives/form/form'; import { Popover, PopoverContent, PopoverTrigger } from '@documenso/ui/primitives/popover'; import { cn } from '../../lib/utils'; import { useToast } from '../use-toast'; import type { TAddSignerSchema as Signer } from './add-signers.types'; const formSchema = z.object({ expiry: z.date({ required_error: 'Please select an expiry date.', }), }); type DocumentExpiryDialogProps = { open: boolean; onOpenChange: (_open: boolean) => void; signer: Signer; documentId: number; }; export default function DocumentExpiryDialog({ open, onOpenChange, signer, documentId, }: DocumentExpiryDialogProps) { const { toast } = useToast(); const router = useRouter(); const { _ } = useLingui(); const form = useForm>({ resolver: zodResolver(formSchema), defaultValues: { expiry: signer.expiry, }, }); const { mutateAsync: setSignerExpiry, isLoading } = trpc.recipient.setSignerExpiry.useMutation({ onSuccess: () => { router.refresh(); toast({ title: _(msg`Signer Expiry Set`), description: _(msg`The expiry date for the signer has been set.`), duration: 5000, }); onOpenChange(false); }, onError: (error) => { toast({ title: _(msg`Error`), description: error.message || _(msg`An error occurred while setting the expiry date.`), variant: 'destructive', duration: 7500, }); }, }); const onSetExpiry = async (values: z.infer) => { if (!signer.nativeId) { return toast({ title: _(msg`Error`), description: _(msg`An error occurred while setting the expiry date.`), variant: 'destructive', duration: 7500, }); } await setSignerExpiry({ documentId, signerId: signer.nativeId, expiry: new Date(values.expiry), }); }; return ( Set Document Expiry Set the expiry date for the document signing recipient. The recipient will not be able to sign the document after this date.
( Expiry Date date < new Date() || date < new Date('1900-01-01')} initialFocus /> The document will expire at 11:59 PM on the selected date. )} />
); }