From 77da7847d9e66afce9e14f69b09abdfed491bbd1 Mon Sep 17 00:00:00 2001 From: Catalin Pit <25515812+catalinpit@users.noreply.github.com> Date: Tue, 10 Sep 2024 09:23:16 +0300 Subject: [PATCH] fix: template with empty advanced fields (#1339) Templates can be created and sent with advanced fields that have empty values. That will cause an error when the user tries to sign the document. For example, you can create a template with a checkbox field and save it. Then, you can click the "Use template" button and send the document by clicking "Send document." However, this shouldn't be possible if the advanced field doesn't have any values. --- packages/lib/translations/de/common.po | 29 ++++++----- packages/lib/translations/en/common.po | 29 ++++++----- .../template-flow/add-template-fields.tsx | 51 +++++++++++++++++++ 3 files changed, 81 insertions(+), 28 deletions(-) diff --git a/packages/lib/translations/de/common.po b/packages/lib/translations/de/common.po index 335026116..256864c45 100644 --- a/packages/lib/translations/de/common.po +++ b/packages/lib/translations/de/common.po @@ -116,7 +116,7 @@ msgid "Advanced Options" msgstr "Erweiterte Optionen" #: packages/ui/primitives/document-flow/add-fields.tsx:510 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:370 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:402 msgid "Advanced settings" msgstr "Erweiterte Einstellungen" @@ -175,7 +175,7 @@ msgid "Character Limit" msgstr "Zeichenbeschränkung" #: packages/ui/primitives/document-flow/add-fields.tsx:932 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:756 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:788 msgid "Checkbox" msgstr "Checkbox" @@ -204,7 +204,7 @@ msgid "Configure Direct Recipient" msgstr "Direkten Empfänger konfigurieren" #: packages/ui/primitives/document-flow/add-fields.tsx:511 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:371 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:403 msgid "Configure the {0} field" msgstr "Konfigurieren Sie das Feld {0}" @@ -221,7 +221,7 @@ msgid "Custom Text" msgstr "Benutzerdefinierter Text" #: packages/ui/primitives/document-flow/add-fields.tsx:828 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:652 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:684 msgid "Date" msgstr "Datum" @@ -253,7 +253,7 @@ msgid "Drag & drop your PDF here." msgstr "Ziehen Sie Ihr PDF hierher." #: packages/ui/primitives/document-flow/add-fields.tsx:958 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:782 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:814 msgid "Dropdown" msgstr "Dropdown" @@ -265,7 +265,7 @@ msgstr "Dropdown-Optionen" #: packages/ui/primitives/document-flow/add-signature.tsx:272 #: packages/ui/primitives/document-flow/add-signers.tsx:232 #: packages/ui/primitives/document-flow/add-signers.tsx:239 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:600 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:632 #: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:210 #: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:217 msgid "Email" @@ -379,7 +379,7 @@ msgstr "Min" #: packages/ui/primitives/document-flow/add-fields.tsx:802 #: packages/ui/primitives/document-flow/add-signature.tsx:298 #: packages/ui/primitives/document-flow/add-signers.tsx:265 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:626 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:658 #: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:245 #: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:251 msgid "Name" @@ -398,12 +398,12 @@ msgid "Needs to view" msgstr "Muss sehen" #: packages/ui/primitives/document-flow/add-fields.tsx:613 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:465 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:497 msgid "No recipient matching this description was found." msgstr "Kein passender Empfänger mit dieser Beschreibung gefunden." #: packages/ui/primitives/document-flow/add-fields.tsx:629 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:481 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:513 msgid "No recipients with this role" msgstr "Keine Empfänger mit dieser Rolle" @@ -428,7 +428,7 @@ msgid "No value found." msgstr "Kein Wert gefunden." #: packages/ui/primitives/document-flow/add-fields.tsx:880 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:704 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:736 msgid "Number" msgstr "Nummer" @@ -463,7 +463,7 @@ msgid "Placeholder" msgstr "Platzhalter" #: packages/ui/primitives/document-flow/add-fields.tsx:906 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:730 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:762 msgid "Radio" msgstr "Radio" @@ -518,7 +518,7 @@ msgstr "Zeilen pro Seite" msgid "Save" msgstr "Speichern" -#: packages/ui/primitives/template-flow/add-template-fields.tsx:798 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:848 msgid "Save Template" msgstr "Vorlage speichern" @@ -568,7 +568,7 @@ msgstr "Unterschreiben" #: packages/ui/primitives/document-flow/add-fields.tsx:724 #: packages/ui/primitives/document-flow/add-signature.tsx:323 #: packages/ui/primitives/document-flow/field-icon.tsx:52 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:548 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:580 msgid "Signature" msgstr "Unterschrift" @@ -614,7 +614,7 @@ msgid "Template title" msgstr "Vorlagentitel" #: packages/ui/primitives/document-flow/add-fields.tsx:854 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:678 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:710 msgid "Text" msgstr "Text" @@ -704,6 +704,7 @@ msgid "Title" msgstr "Titel" #: packages/ui/primitives/document-flow/add-fields.tsx:971 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:828 msgid "To proceed further, please set at least one value for the {0} field." msgstr "Um fortzufahren, legen Sie bitte mindestens einen Wert für das Feld {0} fest." diff --git a/packages/lib/translations/en/common.po b/packages/lib/translations/en/common.po index db14b8f8d..e06ba3743 100644 --- a/packages/lib/translations/en/common.po +++ b/packages/lib/translations/en/common.po @@ -111,7 +111,7 @@ msgid "Advanced Options" msgstr "Advanced Options" #: packages/ui/primitives/document-flow/add-fields.tsx:510 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:370 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:402 msgid "Advanced settings" msgstr "Advanced settings" @@ -170,7 +170,7 @@ msgid "Character Limit" msgstr "Character Limit" #: packages/ui/primitives/document-flow/add-fields.tsx:932 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:756 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:788 msgid "Checkbox" msgstr "Checkbox" @@ -199,7 +199,7 @@ msgid "Configure Direct Recipient" msgstr "Configure Direct Recipient" #: packages/ui/primitives/document-flow/add-fields.tsx:511 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:371 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:403 msgid "Configure the {0} field" msgstr "Configure the {0} field" @@ -216,7 +216,7 @@ msgid "Custom Text" msgstr "Custom Text" #: packages/ui/primitives/document-flow/add-fields.tsx:828 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:652 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:684 msgid "Date" msgstr "Date" @@ -248,7 +248,7 @@ msgid "Drag & drop your PDF here." msgstr "Drag & drop your PDF here." #: packages/ui/primitives/document-flow/add-fields.tsx:958 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:782 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:814 msgid "Dropdown" msgstr "Dropdown" @@ -260,7 +260,7 @@ msgstr "Dropdown options" #: packages/ui/primitives/document-flow/add-signature.tsx:272 #: packages/ui/primitives/document-flow/add-signers.tsx:232 #: packages/ui/primitives/document-flow/add-signers.tsx:239 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:600 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:632 #: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:210 #: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:217 msgid "Email" @@ -374,7 +374,7 @@ msgstr "Min" #: packages/ui/primitives/document-flow/add-fields.tsx:802 #: packages/ui/primitives/document-flow/add-signature.tsx:298 #: packages/ui/primitives/document-flow/add-signers.tsx:265 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:626 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:658 #: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:245 #: packages/ui/primitives/template-flow/add-template-placeholder-recipients.tsx:251 msgid "Name" @@ -393,12 +393,12 @@ msgid "Needs to view" msgstr "Needs to view" #: packages/ui/primitives/document-flow/add-fields.tsx:613 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:465 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:497 msgid "No recipient matching this description was found." msgstr "No recipient matching this description was found." #: packages/ui/primitives/document-flow/add-fields.tsx:629 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:481 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:513 msgid "No recipients with this role" msgstr "No recipients with this role" @@ -423,7 +423,7 @@ msgid "No value found." msgstr "No value found." #: packages/ui/primitives/document-flow/add-fields.tsx:880 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:704 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:736 msgid "Number" msgstr "Number" @@ -458,7 +458,7 @@ msgid "Placeholder" msgstr "Placeholder" #: packages/ui/primitives/document-flow/add-fields.tsx:906 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:730 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:762 msgid "Radio" msgstr "Radio" @@ -513,7 +513,7 @@ msgstr "Rows per page" msgid "Save" msgstr "Save" -#: packages/ui/primitives/template-flow/add-template-fields.tsx:798 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:848 msgid "Save Template" msgstr "Save Template" @@ -563,7 +563,7 @@ msgstr "Sign" #: packages/ui/primitives/document-flow/add-fields.tsx:724 #: packages/ui/primitives/document-flow/add-signature.tsx:323 #: packages/ui/primitives/document-flow/field-icon.tsx:52 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:548 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:580 msgid "Signature" msgstr "Signature" @@ -609,7 +609,7 @@ msgid "Template title" msgstr "Template title" #: packages/ui/primitives/document-flow/add-fields.tsx:854 -#: packages/ui/primitives/template-flow/add-template-fields.tsx:678 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:710 msgid "Text" msgstr "Text" @@ -699,6 +699,7 @@ msgid "Title" msgstr "Title" #: packages/ui/primitives/document-flow/add-fields.tsx:971 +#: packages/ui/primitives/template-flow/add-template-fields.tsx:828 msgid "To proceed further, please set at least one value for the {0} field." msgstr "To proceed further, please set at least one value for the {0} field." diff --git a/packages/ui/primitives/template-flow/add-template-fields.tsx b/packages/ui/primitives/template-flow/add-template-fields.tsx index 71897b396..07271fc56 100644 --- a/packages/ui/primitives/template-flow/add-template-fields.tsx +++ b/packages/ui/primitives/template-flow/add-template-fields.tsx @@ -157,6 +157,38 @@ export const AddTemplateFieldsFormPartial = ({ selectedSignerIndex === -1 ? 0 : selectedSignerIndex, ); + const filterFieldsWithEmptyValues = (fields: typeof localFields, fieldType: string) => + fields + .filter((field) => field.type === fieldType) + .filter((field) => { + if (field.fieldMeta && 'values' in field.fieldMeta) { + return field.fieldMeta.values?.length === 0; + } + + return true; + }); + + const emptyCheckboxFields = useMemo( + () => filterFieldsWithEmptyValues(localFields, FieldType.CHECKBOX), + // eslint-disable-next-line react-hooks/exhaustive-deps + [localFields], + ); + + const emptyRadioFields = useMemo( + () => filterFieldsWithEmptyValues(localFields, FieldType.RADIO), + // eslint-disable-next-line react-hooks/exhaustive-deps + [localFields], + ); + + const emptySelectFields = useMemo( + () => filterFieldsWithEmptyValues(localFields, FieldType.DROPDOWN), + // eslint-disable-next-line react-hooks/exhaustive-deps + [localFields], + ); + + const hasErrors = + emptyCheckboxFields.length > 0 || emptyRadioFields.length > 0 || emptySelectFields.length > 0; + const [isFieldWithinBounds, setIsFieldWithinBounds] = useState(false); const [coords, setCoords] = useState({ x: 0, @@ -789,6 +821,24 @@ export const AddTemplateFieldsFormPartial = ({ + {hasErrors && ( +