import { zodResolver } from '@hookform/resolvers/zod'; import { msg } from '@lingui/core/macro'; import { useLingui } from '@lingui/react/macro'; import { Trans } from '@lingui/react/macro'; import { createCallable } from 'react-call'; import { useForm } from 'react-hook-form'; import { z } from 'zod'; import type { TNumberFieldMeta } from '@documenso/lib/types/field-meta'; import { cn } from '@documenso/ui/lib/utils'; import { Button } from '@documenso/ui/primitives/button'; import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from '@documenso/ui/primitives/dialog'; import { numberFormatValues } from '@documenso/ui/primitives/document-flow/field-items-advanced-settings/constants'; import { Form, FormControl, FormField, FormItem, FormLabel, FormMessage, } from '@documenso/ui/primitives/form/form'; import { Input } from '@documenso/ui/primitives/input'; const createNumberFieldSchema = (fieldMeta: TNumberFieldMeta) => { let schema = z.coerce.number({ invalid_type_error: msg`Please enter a valid number`.id, }); const { numberFormat, minValue, maxValue } = fieldMeta; if (typeof minValue === 'number') { schema = schema.min(minValue); } if (typeof maxValue === 'number') { schema = schema.max(maxValue); } if (numberFormat) { const foundRegex = numberFormatValues.find((item) => item.value === numberFormat)?.regex; if (!foundRegex) { return schema; } return schema.refine( (value) => { return foundRegex.test(value.toString()); }, { message: msg`Number needs to be formatted as ${numberFormat}`.id, }, ); } return schema; }; export type SignFieldNumberDialogProps = { fieldMeta: TNumberFieldMeta; }; export const SignFieldNumberDialog = createCallable( ({ call, fieldMeta }) => { const { t } = useLingui(); const ZSignFieldNumberFormSchema = z.object({ number: createNumberFieldSchema(fieldMeta), }); const form = useForm>({ resolver: zodResolver(ZSignFieldNumberFormSchema), defaultValues: { number: undefined, }, }); return ( (!value ? call.end(null) : null)}> Sign Number Field Insert a value into the number field
call.end(data.number))}>
( {fieldMeta.label && {fieldMeta.label}} )} />
); }, );