From 9139f3a3b4898ed0f64f096b1c68869e70be849d Mon Sep 17 00:00:00 2001 From: Ollie Halliday <22655069+Hallidayo@users.noreply.github.com> Date: Tue, 3 Oct 2023 14:39:00 +0100 Subject: [PATCH] date format select added --- .../app/(signing)/sign/[token]/date-field.tsx | 5 +++- .../src/app/(signing)/sign/[token]/form.tsx | 29 ++++++++++++++++++- .../app/(signing)/sign/[token]/provider.tsx | 7 +++++ .../field/sign-field-with-token.ts | 2 +- 4 files changed, 40 insertions(+), 3 deletions(-) diff --git a/apps/web/src/app/(signing)/sign/[token]/date-field.tsx b/apps/web/src/app/(signing)/sign/[token]/date-field.tsx index 9cff29c64..15a52e93d 100644 --- a/apps/web/src/app/(signing)/sign/[token]/date-field.tsx +++ b/apps/web/src/app/(signing)/sign/[token]/date-field.tsx @@ -11,6 +11,7 @@ import { FieldWithSignature } from '@documenso/prisma/types/field-with-signature import { trpc } from '@documenso/trpc/react'; import { useToast } from '@documenso/ui/primitives/use-toast'; +import { useRequiredSigningContext } from './provider'; import { SigningFieldContainer } from './signing-field-container'; export type DateFieldProps = { @@ -25,6 +26,8 @@ export const DateField = ({ field, recipient }: DateFieldProps) => { const [isPending, startTransition] = useTransition(); + const { dateFormat } = useRequiredSigningContext(); + const { mutateAsync: signFieldWithToken, isLoading: isSignFieldWithTokenLoading } = trpc.field.signFieldWithToken.useMutation(); @@ -40,7 +43,7 @@ export const DateField = ({ field, recipient }: DateFieldProps) => { await signFieldWithToken({ token: recipient.token, fieldId: field.id, - value: '', + value: dateFormat, }); startTransition(() => router.refresh()); diff --git a/apps/web/src/app/(signing)/sign/[token]/form.tsx b/apps/web/src/app/(signing)/sign/[token]/form.tsx index 36a54879c..a7200bffb 100644 --- a/apps/web/src/app/(signing)/sign/[token]/form.tsx +++ b/apps/web/src/app/(signing)/sign/[token]/form.tsx @@ -16,6 +16,13 @@ import { Button } from '@documenso/ui/primitives/button'; import { Card, CardContent } from '@documenso/ui/primitives/card'; import { Input } from '@documenso/ui/primitives/input'; import { Label } from '@documenso/ui/primitives/label'; +import { + Select, + SelectContent, + SelectItem, + SelectTrigger, + SelectValue, +} from '@documenso/ui/primitives/select'; import { SignaturePad } from '@documenso/ui/primitives/signature-pad'; import { useRequiredSigningContext } from './provider'; @@ -30,7 +37,8 @@ export const SigningForm = ({ document, recipient, fields }: SigningFormProps) = const router = useRouter(); const { data: session } = useSession(); - const { fullName, signature, setFullName, setSignature } = useRequiredSigningContext(); + const { fullName, signature, setFullName, setSignature, dateFormat, setDateFormat } = + useRequiredSigningContext(); const [validateUninsertedFields, setValidateUninsertedFields] = useState(false); @@ -103,6 +111,25 @@ export const SigningForm = ({ document, recipient, fields }: SigningFormProps) = /> +
+ + + +
+
diff --git a/apps/web/src/app/(signing)/sign/[token]/provider.tsx b/apps/web/src/app/(signing)/sign/[token]/provider.tsx index 454007cb0..ea40ae296 100644 --- a/apps/web/src/app/(signing)/sign/[token]/provider.tsx +++ b/apps/web/src/app/(signing)/sign/[token]/provider.tsx @@ -9,6 +9,8 @@ export type SigningContextValue = { setEmail: (_value: string) => void; signature: string | null; setSignature: (_value: string | null) => void; + dateFormat: string; + setDateFormat: (_value: string) => void; }; const SigningContext = createContext(null); @@ -31,6 +33,7 @@ export interface SigningProviderProps { fullName?: string | null; email?: string | null; signature?: string | null; + dateFormat?: string | null; children: React.ReactNode; } @@ -38,11 +41,13 @@ export const SigningProvider = ({ fullName: initialFullName, email: initialEmail, signature: initialSignature, + dateFormat: initialDateFormat, children, }: SigningProviderProps) => { const [fullName, setFullName] = useState(initialFullName || ''); const [email, setEmail] = useState(initialEmail || ''); const [signature, setSignature] = useState(initialSignature || null); + const [dateFormat, setDateFormat] = useState(initialDateFormat || 'yyyy-MM-dd hh:mm a'); return ( {children} diff --git a/packages/lib/server-only/field/sign-field-with-token.ts b/packages/lib/server-only/field/sign-field-with-token.ts index 04c5b0ddb..6da754229 100644 --- a/packages/lib/server-only/field/sign-field-with-token.ts +++ b/packages/lib/server-only/field/sign-field-with-token.ts @@ -58,7 +58,7 @@ export const signFieldWithToken = async ({ const typedSignature = isSignatureField && !isBase64 ? value : undefined; if (field.type === FieldType.DATE) { - customText = DateTime.now().toFormat('yyyy-MM-dd hh:mm a'); + customText = DateTime.now().toFormat(value); } await prisma.field.update({