import { type TEnvelopeExpirationPeriod, ZEnvelopeExpirationPeriod, } from '@documenso/lib/constants/envelope-expiration'; import { type TEnvelopeReminderSettings, ZEnvelopeReminderSettings } from '@documenso/lib/constants/envelope-reminder'; import { ExpirationPeriodPicker } from '@documenso/ui/components/document/expiration-period-picker'; import { ReminderSettingsPicker } from '@documenso/ui/components/document/reminder-settings-picker'; import { Form, FormControl, FormDescription, FormField, FormMessage } from '@documenso/ui/primitives/form/form'; import { zodResolver } from '@hookform/resolvers/zod'; import { Trans, useLingui } from '@lingui/react/macro'; import type { TeamGlobalSettings } from '@prisma/client'; import { useForm } from 'react-hook-form'; import { z } from 'zod'; import { FormStickySaveBar } from './form-sticky-save-bar'; import { InheritableField } from './inheritable-field'; const ZReminderPreferencesFormSchema = z.object({ envelopeExpirationPeriod: ZEnvelopeExpirationPeriod.nullable(), reminderSettings: ZEnvelopeReminderSettings.nullable(), }); export type TReminderPreferencesFormSchema = { envelopeExpirationPeriod: TEnvelopeExpirationPeriod | null; reminderSettings: TEnvelopeReminderSettings | null; }; type SettingsSubset = Pick; export type ReminderPreferencesFormProps = { settings: SettingsSubset; canInherit: boolean; onFormSubmit: (data: TReminderPreferencesFormSchema) => Promise; }; export const ReminderPreferencesForm = ({ settings, canInherit, onFormSubmit }: ReminderPreferencesFormProps) => { const { t } = useLingui(); const form = useForm({ defaultValues: { envelopeExpirationPeriod: settings.envelopeExpirationPeriod ?? null, reminderSettings: settings.reminderSettings ?? null, }, resolver: zodResolver(ZReminderPreferencesFormSchema), }); const handleFormSubmit = form.handleSubmit(async (data) => { try { await onFormSubmit(data); } catch { // The page handler surfaces its own error toast. Keep the form dirty so // the save bar stays visible and the user can retry. return; } form.reset(data); }); return (
( Default Envelope Expiration} testId="envelope-expiration-period" > Controls how long recipients have to complete signing before the document expires. After expiration, recipients can no longer sign the document. )} /> ( Default Signing Reminders} testId="reminder-settings" > Controls when and how often reminder emails are sent to recipients who have not yet completed signing. )} /> form.reset()} />
); };