diff --git a/packages/ui/primitives/document-flow/add-fields.tsx b/packages/ui/primitives/document-flow/add-fields.tsx index 39139e29b..bd16d7677 100644 --- a/packages/ui/primitives/document-flow/add-fields.tsx +++ b/packages/ui/primitives/document-flow/add-fields.tsx @@ -3,9 +3,8 @@ import { useCallback, useEffect, useMemo, useRef, useState } from 'react'; import { msg } from '@lingui/core/macro'; import { useLingui } from '@lingui/react'; import { Trans } from '@lingui/react/macro'; -import { Prisma } from '@prisma/client'; import type { Field, Recipient } from '@prisma/client'; -import { FieldType, RecipientRole, SendStatus } from '@prisma/client'; +import { FieldType, Prisma, RecipientRole, SendStatus } from '@prisma/client'; import { CalendarDays, Check, @@ -411,8 +410,11 @@ export const AddFieldsFormPartial = ({ ); const onFieldCopy = useCallback( - (event?: KeyboardEvent | null, options?: { duplicate?: boolean }) => { - const { duplicate = false } = options ?? {}; + ( + event?: KeyboardEvent | null, + options?: { duplicate?: boolean; duplicateAllPages?: boolean }, + ) => { + const { duplicate = false, duplicateAllPages = false } = options ?? {}; if (lastActiveField) { event?.preventDefault(); @@ -428,6 +430,31 @@ export const AddFieldsFormPartial = ({ return; } + if (duplicateAllPages) { + const pages = Array.from(document.querySelectorAll(PDF_VIEWER_PAGE_SELECTOR)); + const totalPages = pages.length; + + for (let pageNumber = 1; pageNumber <= totalPages; pageNumber++) { + if (pageNumber !== lastActiveField.pageNumber) { + const newField: TAddFieldsFormSchema['fields'][0] = { + ...structuredClone(lastActiveField), + formId: nanoid(12), + signerEmail: selectedSigner?.email ?? lastActiveField.signerEmail, + pageNumber, + }; + + append(newField); + } + } + + toast({ + title: 'Field duplicated', + description: 'Field has been duplicated across all pages', + }); + + return; + } + const newField: TAddFieldsFormSchema['fields'][0] = { ...structuredClone(lastActiveField), formId: nanoid(12), @@ -653,6 +680,9 @@ export const AddFieldsFormPartial = ({ onMove={(options) => onFieldMove(options, index)} onRemove={() => remove(index)} onDuplicate={() => onFieldCopy(null, { duplicate: true })} + onDuplicateAllPages={() => + onFieldCopy(null, { duplicate: true, duplicateAllPages: true }) + } onAdvancedSettings={() => { setCurrentField(field); handleAdvancedSettings(); diff --git a/packages/ui/primitives/document-flow/field-item-advanced-settings.tsx b/packages/ui/primitives/document-flow/field-item-advanced-settings.tsx index ea6097f73..6c9bca465 100644 --- a/packages/ui/primitives/document-flow/field-item-advanced-settings.tsx +++ b/packages/ui/primitives/document-flow/field-item-advanced-settings.tsx @@ -303,6 +303,7 @@ export const FieldAdvancedSettings = forwardRef )) .otherwise(() => null)} + {errors.length > 0 && (