diff --git a/apps/remix/app/components/embed/embed-direct-template-client-page.tsx b/apps/remix/app/components/embed/embed-direct-template-client-page.tsx index 2f2a47058..c88813e1f 100644 --- a/apps/remix/app/components/embed/embed-direct-template-client-page.tsx +++ b/apps/remix/app/components/embed/embed-direct-template-client-page.tsx @@ -13,6 +13,10 @@ import { useThrottleFn } from '@documenso/lib/client-only/hooks/use-throttle-fn' import { DEFAULT_DOCUMENT_DATE_FORMAT } from '@documenso/lib/constants/date-formats'; import { PDF_VIEWER_PAGE_SELECTOR } from '@documenso/lib/constants/pdf-viewer'; import { DEFAULT_DOCUMENT_TIME_ZONE } from '@documenso/lib/constants/time-zones'; +import { + isFieldUnsignedAndRequired, + isRequiredField, +} from '@documenso/lib/utils/advanced-fields-helpers'; import { validateFieldsInserted } from '@documenso/lib/utils/fields'; import { trpc } from '@documenso/trpc/react'; import type { @@ -92,7 +96,7 @@ export const EmbedDirectTemplateClientPage = ({ const [localFields, setLocalFields] = useState(() => fields); const [pendingFields, _completedFields] = [ - localFields.filter((field) => !field.inserted), + localFields.filter((field) => isFieldUnsignedAndRequired(field)), localFields.filter((field) => field.inserted), ]; @@ -110,7 +114,7 @@ export const EmbedDirectTemplateClientPage = ({ const newField: DirectTemplateLocalField = structuredClone({ ...field, - customText: payload.value, + customText: payload.value ?? '', inserted: true, signedValue: payload, }); @@ -121,8 +125,10 @@ export const EmbedDirectTemplateClientPage = ({ created: new Date(), recipientId: 1, fieldId: 1, - signatureImageAsBase64: payload.value.startsWith('data:') ? payload.value : null, - typedSignature: payload.value.startsWith('data:') ? null : payload.value, + signatureImageAsBase64: + payload.value && payload.value.startsWith('data:') ? payload.value : null, + typedSignature: + payload.value && !payload.value.startsWith('data:') ? payload.value : null, } satisfies Signature; } @@ -180,7 +186,7 @@ export const EmbedDirectTemplateClientPage = ({ }; const onNextFieldClick = () => { - validateFieldsInserted(localFields); + validateFieldsInserted(pendingFields); setShowPendingFieldTooltip(true); setIsExpanded(false); @@ -192,7 +198,7 @@ export const EmbedDirectTemplateClientPage = ({ return; } - const valid = validateFieldsInserted(localFields); + const valid = validateFieldsInserted(pendingFields); if (!valid) { setShowPendingFieldTooltip(true); @@ -205,12 +211,6 @@ export const EmbedDirectTemplateClientPage = ({ directTemplateExternalId = decodeURIComponent(directTemplateExternalId); } - localFields.forEach((field) => { - if (!field.signedValue) { - throw new Error('Invalid configuration'); - } - }); - const { documentId, token: documentToken, @@ -221,13 +221,11 @@ export const EmbedDirectTemplateClientPage = ({ directRecipientName: fullName, directRecipientEmail: email, templateUpdatedAt: updatedAt, - signedFieldValues: localFields.map((field) => { - if (!field.signedValue) { - throw new Error('Invalid configuration'); - } - - return field.signedValue; - }), + signedFieldValues: localFields + .filter((field) => { + return field.signedValue && (isRequiredField(field) || field.inserted); + }) + .map((field) => field.signedValue!), }); if (window.parent) { diff --git a/apps/remix/app/components/embed/embed-document-signing-page.tsx b/apps/remix/app/components/embed/embed-document-signing-page.tsx index 05b48fbb1..5361ded5e 100644 --- a/apps/remix/app/components/embed/embed-document-signing-page.tsx +++ b/apps/remix/app/components/embed/embed-document-signing-page.tsx @@ -1,4 +1,4 @@ -import { useEffect, useId, useLayoutEffect, useState } from 'react'; +import { useEffect, useId, useLayoutEffect, useMemo, useState } from 'react'; import { msg } from '@lingui/core/macro'; import { useLingui } from '@lingui/react'; @@ -15,6 +15,7 @@ import { LucideChevronDown, LucideChevronUp } from 'lucide-react'; import { useThrottleFn } from '@documenso/lib/client-only/hooks/use-throttle-fn'; import { PDF_VIEWER_PAGE_SELECTOR } from '@documenso/lib/constants/pdf-viewer'; +import { isFieldUnsignedAndRequired } from '@documenso/lib/utils/advanced-fields-helpers'; import { validateFieldsInserted } from '@documenso/lib/utils/fields'; import type { RecipientWithFields } from '@documenso/prisma/types/recipient-with-fields'; import { trpc } from '@documenso/trpc/react'; @@ -101,19 +102,26 @@ export const EmbedSignDocumentClientPage = ({ const [throttledOnCompleteClick, isThrottled] = useThrottleFn(() => void onCompleteClick(), 500); const [pendingFields, _completedFields] = [ - fields.filter((field) => field.recipientId === recipient.id && !field.inserted), + fields.filter( + (field) => field.recipientId === recipient.id && isFieldUnsignedAndRequired(field), + ), fields.filter((field) => field.inserted), ]; const { mutateAsync: completeDocumentWithToken, isPending: isSubmitting } = trpc.recipient.completeDocumentWithToken.useMutation(); + const fieldsRequiringValidation = useMemo( + () => fields.filter(isFieldUnsignedAndRequired), + [fields], + ); + const hasSignatureField = fields.some((field) => field.type === FieldType.SIGNATURE); const assistantSignersId = useId(); const onNextFieldClick = () => { - validateFieldsInserted(fields); + validateFieldsInserted(fieldsRequiringValidation); setShowPendingFieldTooltip(true); setIsExpanded(false); @@ -125,7 +133,7 @@ export const EmbedSignDocumentClientPage = ({ return; } - const valid = validateFieldsInserted(fields); + const valid = validateFieldsInserted(fieldsRequiringValidation); if (!valid) { setShowPendingFieldTooltip(true); diff --git a/apps/remix/app/components/general/direct-template/direct-template-signing-form.tsx b/apps/remix/app/components/general/direct-template/direct-template-signing-form.tsx index 5483e051d..9bbcf09a7 100644 --- a/apps/remix/app/components/general/direct-template/direct-template-signing-form.tsx +++ b/apps/remix/app/components/general/direct-template/direct-template-signing-form.tsx @@ -91,7 +91,7 @@ export const DirectTemplateSigningForm = ({ const tempField: DirectTemplateLocalField = { ...field, - customText: value.value, + customText: value.value ?? '', inserted: true, signedValue: value, }; @@ -102,8 +102,8 @@ export const DirectTemplateSigningForm = ({ created: new Date(), recipientId: 1, fieldId: 1, - signatureImageAsBase64: value.value.startsWith('data:') ? value.value : null, - typedSignature: value.value.startsWith('data:') ? null : value.value, + signatureImageAsBase64: value.value?.startsWith('data:') ? value.value : null, + typedSignature: value.value && !value.value.startsWith('data:') ? value.value : null, } satisfies Signature; } diff --git a/packages/lib/server-only/template/create-document-from-direct-template.ts b/packages/lib/server-only/template/create-document-from-direct-template.ts index cfc2efb75..965bc6583 100644 --- a/packages/lib/server-only/template/create-document-from-direct-template.ts +++ b/packages/lib/server-only/template/create-document-from-direct-template.ts @@ -37,6 +37,7 @@ import { mapDocumentToWebhookDocumentPayload, } from '../../types/webhook-payload'; import type { ApiRequestMetadata } from '../../universal/extract-request-metadata'; +import { isRequiredField } from '../../utils/advanced-fields-helpers'; import type { CreateDocumentAuditLogDataResponse } from '../../utils/document-audit-logs'; import { createDocumentAuditLogData } from '../../utils/document-audit-logs'; import { @@ -176,20 +177,28 @@ export const createDocumentFromDirectTemplate = async ({ const metaSigningOrder = template.templateMeta?.signingOrder || DocumentSigningOrder.PARALLEL; // Associate, validate and map to a query every direct template recipient field with the provided fields. + // Only process fields that are either required or have been signed by the user + const fieldsToProcess = directTemplateRecipient.fields.filter((templateField) => { + const signedFieldValue = signedFieldValues.find((value) => value.fieldId === templateField.id); + + // Include if it's required or has a signed value + return isRequiredField(templateField) || signedFieldValue !== undefined; + }); + const createDirectRecipientFieldArgs = await Promise.all( - directTemplateRecipient.fields.map(async (templateField) => { + fieldsToProcess.map(async (templateField) => { const signedFieldValue = signedFieldValues.find( (value) => value.fieldId === templateField.id, ); - if (!signedFieldValue) { + if (isRequiredField(templateField) && !signedFieldValue) { throw new AppError(AppErrorCode.INVALID_BODY, { message: 'Invalid, missing or changed fields', }); } if (templateField.type === FieldType.NAME && directRecipientName === undefined) { - directRecipientName === signedFieldValue.value; + directRecipientName === signedFieldValue?.value; } const derivedRecipientActionAuth = await validateFieldAuth({ @@ -200,9 +209,18 @@ export const createDocumentFromDirectTemplate = async ({ }, field: templateField, userId: user?.id, - authOptions: signedFieldValue.authOptions, + authOptions: signedFieldValue?.authOptions, }); + if (!signedFieldValue) { + return { + templateField, + customText: '', + derivedRecipientActionAuth, + signature: null, + }; + } + const { value, isBase64 } = signedFieldValue; const isSignatureField = @@ -380,7 +398,7 @@ export const createDocumentFromDirectTemplate = async ({ positionY: templateField.positionY, width: templateField.width, height: templateField.height, - customText, + customText: customText ?? '', inserted: true, fieldMeta: templateField.fieldMeta || Prisma.JsonNull, })), diff --git a/packages/lib/translations/de/web.po b/packages/lib/translations/de/web.po index 28bfd50bf..8f0961af1 100644 --- a/packages/lib/translations/de/web.po +++ b/packages/lib/translations/de/web.po @@ -473,6 +473,7 @@ msgstr "<0>Sie sind dabei, die Genehmigung von <1>\"{documentTitle}\" abzusc msgid "<0>You are about to complete signing \"<1>{documentTitle}\".<2/> Are you sure?" msgstr "<0>Sie sind dabei, die Unterzeichnung von \"<1>{documentTitle}\" abzuschließen.<2/> Sind Sie sicher?" +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx msgid "<0>You are about to complete viewing \"<1>{documentTitle}\".<2/> Are you sure?" msgstr "<0>Sie sind dabei, die Ansicht von \"<1>{documentTitle}\" abzuschließen.<2/> Sind Sie sicher?" @@ -1144,6 +1145,7 @@ msgstr "App-Version" #: apps/remix/app/components/tables/documents-table-action-dropdown.tsx #: apps/remix/app/components/tables/documents-table-action-button.tsx #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/general/document/document-page-view-button.tsx #: packages/lib/constants/recipient-roles.ts msgid "Approve" @@ -1565,6 +1567,7 @@ msgstr "Klicken, um das Feld auszufüllen" msgid "Close" msgstr "Schließen" +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/forms/signup.tsx #: apps/remix/app/components/embed/embed-document-signing-page.tsx @@ -1576,6 +1579,10 @@ msgstr "Abschließen" msgid "Complete Approval" msgstr "Genehmigung abschließen" +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx +msgid "Complete Assisting" +msgstr "" + #: apps/remix/app/components/dialogs/assistant-confirmation-dialog.tsx msgid "Complete Document" msgstr "" @@ -1588,6 +1595,7 @@ msgstr "Unterzeichnung abschließen" msgid "Complete the fields for the following signers. Once reviewed, they will inform you if any modifications are needed." msgstr "" +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx msgid "Complete Viewing" msgstr "Betrachten abschließen" @@ -3373,6 +3381,11 @@ msgstr "Verwalten Sie hier Ihre Seiteneinstellungen" msgid "Manager" msgstr "Manager" +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx +msgid "Mark as viewed" +msgstr "" + +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx msgid "Mark as Viewed" msgstr "Als angesehen markieren" @@ -3988,6 +4001,10 @@ msgstr "Bitte geben Sie ein Token von der Authentifizierungs-App oder einen Back msgid "Please provide a token from your authenticator, or a backup code." msgstr "Bitte geben Sie ein Token von Ihrem Authentifizierer oder einen Backup-Code an." +#: apps/remix/app/components/general/document-signing/document-signing-form.tsx +msgid "Please review the document before approving." +msgstr "" + #: apps/remix/app/components/general/document-signing/document-signing-form.tsx msgid "Please review the document before signing." msgstr "Bitte überprüfen Sie das Dokument vor der Unterzeichnung." diff --git a/packages/lib/translations/en/web.po b/packages/lib/translations/en/web.po index f1fd481ce..97a33b80a 100644 --- a/packages/lib/translations/en/web.po +++ b/packages/lib/translations/en/web.po @@ -468,6 +468,7 @@ msgstr "<0>You are about to complete approving <1>\"{documentTitle}\".<2 msgid "<0>You are about to complete signing \"<1>{documentTitle}\".<2/> Are you sure?" msgstr "<0>You are about to complete signing \"<1>{documentTitle}\".<2/> Are you sure?" +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx msgid "<0>You are about to complete viewing \"<1>{documentTitle}\".<2/> Are you sure?" msgstr "<0>You are about to complete viewing \"<1>{documentTitle}\".<2/> Are you sure?" @@ -1139,6 +1140,7 @@ msgstr "App Version" #: apps/remix/app/components/tables/documents-table-action-dropdown.tsx #: apps/remix/app/components/tables/documents-table-action-button.tsx #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/general/document/document-page-view-button.tsx #: packages/lib/constants/recipient-roles.ts msgid "Approve" @@ -1560,6 +1562,7 @@ msgstr "Click to insert field" msgid "Close" msgstr "Close" +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/forms/signup.tsx #: apps/remix/app/components/embed/embed-document-signing-page.tsx @@ -1571,6 +1574,10 @@ msgstr "Complete" msgid "Complete Approval" msgstr "Complete Approval" +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx +msgid "Complete Assisting" +msgstr "Complete Assisting" + #: apps/remix/app/components/dialogs/assistant-confirmation-dialog.tsx msgid "Complete Document" msgstr "Complete Document" @@ -1583,6 +1590,7 @@ msgstr "Complete Signing" msgid "Complete the fields for the following signers. Once reviewed, they will inform you if any modifications are needed." msgstr "Complete the fields for the following signers. Once reviewed, they will inform you if any modifications are needed." +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx msgid "Complete Viewing" msgstr "Complete Viewing" @@ -3368,6 +3376,11 @@ msgstr "Manage your site settings here" msgid "Manager" msgstr "Manager" +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx +msgid "Mark as viewed" +msgstr "Mark as viewed" + +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx msgid "Mark as Viewed" msgstr "Mark as Viewed" @@ -3983,6 +3996,10 @@ msgstr "Please provide a token from the authenticator, or a backup code. If you msgid "Please provide a token from your authenticator, or a backup code." msgstr "Please provide a token from your authenticator, or a backup code." +#: apps/remix/app/components/general/document-signing/document-signing-form.tsx +msgid "Please review the document before approving." +msgstr "Please review the document before approving." + #: apps/remix/app/components/general/document-signing/document-signing-form.tsx msgid "Please review the document before signing." msgstr "Please review the document before signing." diff --git a/packages/lib/translations/es/web.po b/packages/lib/translations/es/web.po index a1d27c0f2..91c795f37 100644 --- a/packages/lib/translations/es/web.po +++ b/packages/lib/translations/es/web.po @@ -473,6 +473,7 @@ msgstr "<0>Está a punto de completar la aprobación de <1>\"{documentTitle}\"You are about to complete signing \"<1>{documentTitle}\".<2/> Are you sure?" msgstr "<0>Está a punto de completar la firma de \"<1>{documentTitle}\".<2/> ¿Está seguro?" +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx msgid "<0>You are about to complete viewing \"<1>{documentTitle}\".<2/> Are you sure?" msgstr "<0>Está a punto de completar la visualización de \"<1>{documentTitle}\".<2/> ¿Está seguro?" @@ -1144,6 +1145,7 @@ msgstr "Versión de la Aplicación" #: apps/remix/app/components/tables/documents-table-action-dropdown.tsx #: apps/remix/app/components/tables/documents-table-action-button.tsx #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/general/document/document-page-view-button.tsx #: packages/lib/constants/recipient-roles.ts msgid "Approve" @@ -1565,6 +1567,7 @@ msgstr "Haga clic para insertar campo" msgid "Close" msgstr "Cerrar" +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/forms/signup.tsx #: apps/remix/app/components/embed/embed-document-signing-page.tsx @@ -1576,6 +1579,10 @@ msgstr "Completo" msgid "Complete Approval" msgstr "Completar Aprobación" +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx +msgid "Complete Assisting" +msgstr "" + #: apps/remix/app/components/dialogs/assistant-confirmation-dialog.tsx msgid "Complete Document" msgstr "" @@ -1588,6 +1595,7 @@ msgstr "Completar Firmado" msgid "Complete the fields for the following signers. Once reviewed, they will inform you if any modifications are needed." msgstr "" +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx msgid "Complete Viewing" msgstr "Completar Visualización" @@ -3373,6 +3381,11 @@ msgstr "Gestionar la configuración de tu sitio aquí" msgid "Manager" msgstr "Gerente" +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx +msgid "Mark as viewed" +msgstr "" + +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx msgid "Mark as Viewed" msgstr "Marcar como visto" @@ -3988,6 +4001,10 @@ msgstr "Por favor, proporciona un token del autenticador o un código de respald msgid "Please provide a token from your authenticator, or a backup code." msgstr "Por favor, proporciona un token de tu autenticador, o un código de respaldo." +#: apps/remix/app/components/general/document-signing/document-signing-form.tsx +msgid "Please review the document before approving." +msgstr "" + #: apps/remix/app/components/general/document-signing/document-signing-form.tsx msgid "Please review the document before signing." msgstr "Por favor, revise el documento antes de firmar." diff --git a/packages/lib/translations/fr/web.po b/packages/lib/translations/fr/web.po index f218e9f44..2d96104f7 100644 --- a/packages/lib/translations/fr/web.po +++ b/packages/lib/translations/fr/web.po @@ -473,6 +473,7 @@ msgstr "<0>Vous êtes sur le point de terminer l'approbation de <1>\"{documentTi msgid "<0>You are about to complete signing \"<1>{documentTitle}\".<2/> Are you sure?" msgstr "<0>Vous êtes sur le point de terminer la signature de \"<1>{documentTitle}\".<2/> Êtes-vous sûr ?" +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx msgid "<0>You are about to complete viewing \"<1>{documentTitle}\".<2/> Are you sure?" msgstr "<0>Vous êtes sur le point de terminer la visualisation de \"<1>{documentTitle}\".<2/> Êtes-vous sûr ?" @@ -1144,6 +1145,7 @@ msgstr "Version de l'application" #: apps/remix/app/components/tables/documents-table-action-dropdown.tsx #: apps/remix/app/components/tables/documents-table-action-button.tsx #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/general/document/document-page-view-button.tsx #: packages/lib/constants/recipient-roles.ts msgid "Approve" @@ -1565,6 +1567,7 @@ msgstr "Cliquez pour insérer un champ" msgid "Close" msgstr "Fermer" +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/forms/signup.tsx #: apps/remix/app/components/embed/embed-document-signing-page.tsx @@ -1576,6 +1579,10 @@ msgstr "Compléter" msgid "Complete Approval" msgstr "Compléter l'approbation" +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx +msgid "Complete Assisting" +msgstr "" + #: apps/remix/app/components/dialogs/assistant-confirmation-dialog.tsx msgid "Complete Document" msgstr "" @@ -1588,6 +1595,7 @@ msgstr "Compléter la signature" msgid "Complete the fields for the following signers. Once reviewed, they will inform you if any modifications are needed." msgstr "" +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx msgid "Complete Viewing" msgstr "Compléter la visualisation" @@ -3373,6 +3381,11 @@ msgstr "Gérer les paramètres de votre site ici" msgid "Manager" msgstr "Gestionnaire" +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx +msgid "Mark as viewed" +msgstr "" + +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx msgid "Mark as Viewed" msgstr "Marquer comme vu" @@ -3988,6 +4001,10 @@ msgstr "Veuillez fournir un token de l'authentificateur, ou un code de secours. msgid "Please provide a token from your authenticator, or a backup code." msgstr "Veuillez fournir un token de votre authentificateur, ou un code de secours." +#: apps/remix/app/components/general/document-signing/document-signing-form.tsx +msgid "Please review the document before approving." +msgstr "" + #: apps/remix/app/components/general/document-signing/document-signing-form.tsx msgid "Please review the document before signing." msgstr "Veuillez examiner le document avant de signer." diff --git a/packages/lib/translations/it/web.po b/packages/lib/translations/it/web.po index 621505b89..ec1f01975 100644 --- a/packages/lib/translations/it/web.po +++ b/packages/lib/translations/it/web.po @@ -473,6 +473,7 @@ msgstr "<0>Stai per completare l'approvazione di <1>\"{documentTitle}\". msgid "<0>You are about to complete signing \"<1>{documentTitle}\".<2/> Are you sure?" msgstr "<0>Stai per completare la firma di \"<1>{documentTitle}\".<2/> Sei sicuro?" +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx msgid "<0>You are about to complete viewing \"<1>{documentTitle}\".<2/> Are you sure?" msgstr "<0>Stai per completare la visualizzazione di \"<1>{documentTitle}\".<2/> Sei sicuro?" @@ -1144,6 +1145,7 @@ msgstr "Versione dell'app" #: apps/remix/app/components/tables/documents-table-action-dropdown.tsx #: apps/remix/app/components/tables/documents-table-action-button.tsx #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/general/document/document-page-view-button.tsx #: packages/lib/constants/recipient-roles.ts msgid "Approve" @@ -1565,6 +1567,7 @@ msgstr "Clicca per inserire il campo" msgid "Close" msgstr "Chiudi" +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/forms/signup.tsx #: apps/remix/app/components/embed/embed-document-signing-page.tsx @@ -1576,6 +1579,10 @@ msgstr "Completa" msgid "Complete Approval" msgstr "Completa l'Approvazione" +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx +msgid "Complete Assisting" +msgstr "" + #: apps/remix/app/components/dialogs/assistant-confirmation-dialog.tsx msgid "Complete Document" msgstr "" @@ -1588,6 +1595,7 @@ msgstr "Completa la Firma" msgid "Complete the fields for the following signers. Once reviewed, they will inform you if any modifications are needed." msgstr "" +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx msgid "Complete Viewing" msgstr "Completa la Visualizzazione" @@ -3373,6 +3381,11 @@ msgstr "Gestisci le impostazioni del tuo sito qui" msgid "Manager" msgstr "Responsabile" +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx +msgid "Mark as viewed" +msgstr "" + +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx msgid "Mark as Viewed" msgstr "Segna come visto" @@ -3988,6 +4001,10 @@ msgstr "Si prega di fornire un token dal tuo autenticatore, o un codice di backu msgid "Please provide a token from your authenticator, or a backup code." msgstr "Si prega di fornire un token dal tuo autenticatore, o un codice di backup." +#: apps/remix/app/components/general/document-signing/document-signing-form.tsx +msgid "Please review the document before approving." +msgstr "" + #: apps/remix/app/components/general/document-signing/document-signing-form.tsx msgid "Please review the document before signing." msgstr "Rivedi il documento prima di firmare." diff --git a/packages/lib/translations/pl/web.po b/packages/lib/translations/pl/web.po index c1c2c25b7..b79d85c43 100644 --- a/packages/lib/translations/pl/web.po +++ b/packages/lib/translations/pl/web.po @@ -473,6 +473,7 @@ msgstr "<0>Jesteś na drodze do zatwierdzenia <1>\"{documentTitle}\".<2/ msgid "<0>You are about to complete signing \"<1>{documentTitle}\".<2/> Are you sure?" msgstr "<0>Jesteś na drodze do ukończenia podpisywania \"<1>{documentTitle}\".<2/> Czy jesteś pewien?" +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx msgid "<0>You are about to complete viewing \"<1>{documentTitle}\".<2/> Are you sure?" msgstr "<0>Jesteś na drodze do zakończenia przeglądania \"<1>{documentTitle}\".<2/> Czy jesteś pewien?" @@ -1144,6 +1145,7 @@ msgstr "Wersja aplikacji" #: apps/remix/app/components/tables/documents-table-action-dropdown.tsx #: apps/remix/app/components/tables/documents-table-action-button.tsx #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/general/document/document-page-view-button.tsx #: packages/lib/constants/recipient-roles.ts msgid "Approve" @@ -1565,6 +1567,7 @@ msgstr "Kliknij, aby wstawić pole" msgid "Close" msgstr "Zamknij" +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/forms/signup.tsx #: apps/remix/app/components/embed/embed-document-signing-page.tsx @@ -1576,6 +1579,10 @@ msgstr "Zakończono" msgid "Complete Approval" msgstr "Zakończ zatwierdzanie" +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx +msgid "Complete Assisting" +msgstr "" + #: apps/remix/app/components/dialogs/assistant-confirmation-dialog.tsx msgid "Complete Document" msgstr "" @@ -1588,6 +1595,7 @@ msgstr "Zakończ podpisywanie" msgid "Complete the fields for the following signers. Once reviewed, they will inform you if any modifications are needed." msgstr "" +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx msgid "Complete Viewing" msgstr "Zakończ wyświetlanie" @@ -3373,6 +3381,11 @@ msgstr "Zarządzaj ustawieniami swojej witryny tutaj" msgid "Manager" msgstr "Menedżer" +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx +msgid "Mark as viewed" +msgstr "" + +#: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx #: apps/remix/app/components/general/document-signing/document-signing-complete-dialog.tsx msgid "Mark as Viewed" msgstr "Oznacz jako wyświetlone" @@ -3988,6 +4001,10 @@ msgstr "Proszę podać token z aplikacji uwierzytelniającej lub kod zapasowy. J msgid "Please provide a token from your authenticator, or a backup code." msgstr "Proszę podać token z Twojego uwierzytelniacza lub kod zapasowy." +#: apps/remix/app/components/general/document-signing/document-signing-form.tsx +msgid "Please review the document before approving." +msgstr "" + #: apps/remix/app/components/general/document-signing/document-signing-form.tsx msgid "Please review the document before signing." msgstr "Proszę przejrzeć dokument przed podpisaniem." diff --git a/packages/trpc/server/field-router/router.ts b/packages/trpc/server/field-router/router.ts index f8afecf5c..236afc360 100644 --- a/packages/trpc/server/field-router/router.ts +++ b/packages/trpc/server/field-router/router.ts @@ -451,7 +451,7 @@ export const fieldRouter = router({ return await signFieldWithToken({ token, fieldId, - value, + value: value ?? '', isBase64, userId: ctx.user?.id, authOptions, diff --git a/packages/trpc/server/field-router/schema.ts b/packages/trpc/server/field-router/schema.ts index 1f1dfe7e3..fcb26e0f2 100644 --- a/packages/trpc/server/field-router/schema.ts +++ b/packages/trpc/server/field-router/schema.ts @@ -153,7 +153,7 @@ export const ZSetFieldsForTemplateResponseSchema = z.object({ export const ZSignFieldWithTokenMutationSchema = z.object({ token: z.string(), fieldId: z.number(), - value: z.string().trim(), + value: z.string().trim().optional(), isBase64: z.boolean().optional(), authOptions: ZRecipientActionAuthSchema.optional(), });