diff --git a/apps/web/src/app/(signing)/sign/[token]/checkbox-field.tsx b/apps/web/src/app/(signing)/sign/[token]/checkbox-field.tsx index caf2293e6..a0da6d850 100644 --- a/apps/web/src/app/(signing)/sign/[token]/checkbox-field.tsx +++ b/apps/web/src/app/(signing)/sign/[token]/checkbox-field.tsx @@ -1,10 +1,13 @@ 'use client'; -import { useEffect, useState, useTransition } from 'react'; +import { useState, useTransition } from 'react'; import { useRouter } from 'next/navigation'; +import { zodResolver } from '@hookform/resolvers/zod'; import { Loader } from 'lucide-react'; +import { useForm } from 'react-hook-form'; +import { z } from 'zod'; import { DO_NOT_INVALIDATE_QUERY_ON_MUTATION } from '@documenso/lib/constants/trpc'; import { AppError, AppErrorCode } from '@documenso/lib/errors/app-error'; @@ -12,12 +15,10 @@ import type { TRecipientActionAuth } from '@documenso/lib/types/document-auth'; import type { Recipient } from '@documenso/prisma/client'; import type { FieldWithSignature } from '@documenso/prisma/types/field-with-signature'; import { trpc } from '@documenso/trpc/react'; -import { Button } from '@documenso/ui/primitives/button'; import { Checkbox } from '@documenso/ui/primitives/checkbox'; -import { Dialog, DialogContent, DialogFooter, DialogTitle } from '@documenso/ui/primitives/dialog'; +import { Form, FormControl, FormField } from '@documenso/ui/primitives/form/form'; import { useToast } from '@documenso/ui/primitives/use-toast'; -import { useRequiredDocumentAuthContext } from './document-auth-provider'; import { SigningFieldContainer } from './signing-field-container'; export type CheckboxFieldProps = { @@ -25,12 +26,16 @@ export type CheckboxFieldProps = { recipient: Recipient; }; +const CheckBoxSchema = z.object({ + check: z.boolean().default(false).optional(), +}); + export const CheckboxField = ({ field, recipient }: CheckboxFieldProps) => { const router = useRouter(); const { toast } = useToast(); - const { executeActionAuthProcedure } = useRequiredDocumentAuthContext(); + // const { executeActionAuthProcedure } = useRequiredDocumentAuthContext(); const [isPending, startTransition] = useTransition(); @@ -44,30 +49,17 @@ export const CheckboxField = ({ field, recipient }: CheckboxFieldProps) => { const isLoading = isSignFieldWithTokenLoading || isRemoveSignedFieldWithTokenLoading || isPending; - const [showCustomTextModal, setShowCustomTextModal] = useState(false); const [localText, setLocalCustomText] = useState(''); - useEffect(() => { - if (!showCustomTextModal) { - setLocalCustomText(''); - } - }, [showCustomTextModal]); - - /** - * When the user clicks the sign button in the dialog where they enter the text field. - */ - const onDialogSignClick = () => { - setShowCustomTextModal(false); - - void executeActionAuthProcedure({ - onReauthFormSubmit: async (authOptions) => await onSign(authOptions), - actionTarget: field.type, - }); - }; + const form = useForm>({ + resolver: zodResolver(CheckBoxSchema), + defaultValues: { + check: true, + }, + }); const onPreSign = () => { if (!localText) { - setShowCustomTextModal(true); return false; } @@ -127,13 +119,18 @@ export const CheckboxField = ({ field, recipient }: CheckboxFieldProps) => { } }; + const onSubmit = (data: z.infer) => { + console.log(data); + }; + return ( {isLoading && (
@@ -142,54 +139,37 @@ export const CheckboxField = ({ field, recipient }: CheckboxFieldProps) => { )} {!field.inserted && ( -

- Checkbox -

+ // TODO: span with a box + //

+ // Checkbox + //

+ + { + console.log('clicked checkbox'); + }} + onCheckedChange={(checked) => { + setLocalCustomText(checked ? '✓' : '𐄂'); + }} + /> )} {field.inserted &&

{field.customText}

} - {/* TODO : Avoid the whole dialog thing */} - - - Check Field - -
- { - setLocalCustomText(checked ? '✓' : '𐄂'); - }} - /> - -
- - -
- - - -
-
-
-
+
+ + ( + + + + )} + /> + + ); }; diff --git a/apps/web/src/app/(signing)/sign/[token]/signing-field-container.tsx b/apps/web/src/app/(signing)/sign/[token]/signing-field-container.tsx index 825a15d0f..927c2b77e 100644 --- a/apps/web/src/app/(signing)/sign/[token]/signing-field-container.tsx +++ b/apps/web/src/app/(signing)/sign/[token]/signing-field-container.tsx @@ -35,8 +35,10 @@ export type SignatureFieldProps = { */ onSign?: (documentAuthValue?: TRecipientActionAuth) => Promise | void; onRemove?: () => Promise | void; - type?: 'Date' | 'Email' | 'Name' | 'Signature'; + type?: 'Date' | 'Email' | 'Name' | 'Signature' | 'Checkbox'; tooltipText?: string | null; + + raw?: boolean; }; export const SigningFieldContainer = ({ @@ -48,6 +50,7 @@ export const SigningFieldContainer = ({ children, type, tooltipText, + raw = false, }: SignatureFieldProps) => { const { executeActionAuthProcedure, isAuthRedirectRequired } = useRequiredDocumentAuthContext(); @@ -103,7 +106,7 @@ export const SigningFieldContainer = ({ }; return ( - + {!field.inserted && !loading && (