fix: allow prefilling date field (#1794)

Allows the prefilling of date fields when creating a document from a
template.

Current implementation is super dirty and should be replaced asap.
This commit is contained in:
Lucas Smith
2025-05-14 20:06:53 +10:00
committed by GitHub
parent f928503a33
commit 5e3a2b8f76
2 changed files with 38 additions and 4 deletions
@@ -9,11 +9,13 @@ import {
SigningStatus, SigningStatus,
WebhookTriggerEvents, WebhookTriggerEvents,
} from '@prisma/client'; } from '@prisma/client';
import { DateTime } from 'luxon';
import { match } from 'ts-pattern'; import { match } from 'ts-pattern';
import { nanoid, prefixedId } from '@documenso/lib/universal/id'; import { nanoid, prefixedId } from '@documenso/lib/universal/id';
import { prisma } from '@documenso/prisma'; import { prisma } from '@documenso/prisma';
import { DEFAULT_DOCUMENT_DATE_FORMAT } from '../../constants/date-formats';
import type { SupportedLanguageCodes } from '../../constants/i18n'; import type { SupportedLanguageCodes } from '../../constants/i18n';
import { AppError, AppErrorCode } from '../../errors/app-error'; import { AppError, AppErrorCode } from '../../errors/app-error';
import { DOCUMENT_AUDIT_LOG_TYPE } from '../../types/document-audit-logs'; import { DOCUMENT_AUDIT_LOG_TYPE } from '../../types/document-audit-logs';
@@ -508,10 +510,8 @@ export const createDocumentFromTemplate = async ({
fieldsToCreate = fieldsToCreate.concat( fieldsToCreate = fieldsToCreate.concat(
fields.map((field) => { fields.map((field) => {
const prefillField = prefillFields?.find((value) => value.id === field.id); const prefillField = prefillFields?.find((value) => value.id === field.id);
// Use type assertion to help TypeScript understand the structure
const updatedFieldMeta = getUpdatedFieldMeta(field, prefillField);
return { const payload = {
documentId: document.id, documentId: document.id,
recipientId: recipient.id, recipientId: recipient.id,
type: field.type, type: field.type,
@@ -522,8 +522,38 @@ export const createDocumentFromTemplate = async ({
height: field.height, height: field.height,
customText: '', customText: '',
inserted: false, inserted: false,
fieldMeta: updatedFieldMeta, fieldMeta: field.fieldMeta,
}; };
if (prefillField) {
match(prefillField)
.with({ type: 'date' }, (selector) => {
if (!selector.value) {
throw new AppError(AppErrorCode.INVALID_BODY, {
message: `Date value is required for field ${field.id}`,
});
}
const date = new Date(selector.value);
if (isNaN(date.getTime())) {
throw new AppError(AppErrorCode.INVALID_BODY, {
message: `Invalid date value for field ${field.id}: ${selector.value}`,
});
}
payload.customText = DateTime.fromJSDate(date).toFormat(
template.templateMeta?.dateFormat ?? DEFAULT_DOCUMENT_DATE_FORMAT,
);
payload.inserted = true;
})
.otherwise((selector) => {
payload.fieldMeta = getUpdatedFieldMeta(field, selector);
});
}
return payload;
}), }),
); );
}); });
+4
View File
@@ -155,6 +155,10 @@ export const ZFieldMetaPrefillFieldsSchema = z
label: z.string().optional(), label: z.string().optional(),
value: z.string().optional(), value: z.string().optional(),
}), }),
z.object({
type: z.literal('date'),
value: z.string().optional(),
}),
]), ]),
); );