feat: add envelope editor

This commit is contained in:
David Nguyen
2025-10-12 23:35:54 +11:00
parent bf89bc781b
commit 0da8e7dbc6
307 changed files with 24657 additions and 3681 deletions

View File

@ -100,7 +100,7 @@ export const TemplateEditForm = ({
},
});
const { mutateAsync: addTemplateFields } = trpc.field.addTemplateFields.useMutation({
const { mutateAsync: addTemplateFields } = trpc.field.setFieldsForTemplate.useMutation({
...DO_NOT_INVALIDATE_QUERY_ON_MUTATION,
onSuccess: (newData) => {
utils.template.getTemplateById.setData(
@ -193,7 +193,10 @@ export const TemplateEditForm = ({
setRecipients({
templateId: template.id,
recipients: data.signers,
recipients: data.signers.map((signer) => ({
...signer,
id: signer.nativeId,
})),
}),
]);
@ -237,7 +240,11 @@ export const TemplateEditForm = ({
const saveFieldsData = async (data: TAddTemplateFieldsFormSchema) => {
return addTemplateFields({
templateId: template.id,
fields: data.fields,
fields: data.fields.map((field) => ({
...field,
id: field.nativeId,
envelopeItemId: template.templateDocumentData.envelopeItemId,
})),
});
};

View File

@ -36,6 +36,7 @@ const DOCUMENT_SOURCE_LABELS: { [key in DocumentSource]: MessageDescriptor } = {
DOCUMENT: msg`Document`,
TEMPLATE: msg`Template`,
TEMPLATE_DIRECT_LINK: msg`Direct link`,
NONE: msg`None`,
};
const ZDocumentSearchParamsSchema = ZUrlSearchParamsSchema.extend({

View File

@ -7,11 +7,13 @@ import type { User } from '@prisma/client';
import { DateTime } from 'luxon';
import { useIsMounted } from '@documenso/lib/client-only/hooks/use-is-mounted';
import type { Template } from '@documenso/prisma/types/template-legacy-schema';
export type TemplatePageViewInformationProps = {
userId: number;
template: Template & {
template: {
userId: number;
createdAt: Date;
updatedAt: Date;
user: Pick<User, 'id' | 'name' | 'email'>;
};
};

View File

@ -113,15 +113,21 @@ export const TemplatePageViewRecentActivity = ({
</div>
<Link
to={`${documentRootPath}/${document.id}`}
to={`${documentRootPath}/${document.envelopeId}`}
className="text-muted-foreground dark:text-muted-foreground/70 flex-auto truncate py-0.5 text-xs leading-5"
>
{match(document.source)
.with(DocumentSource.DOCUMENT, DocumentSource.TEMPLATE, () => (
<Trans>
Document created by <span className="font-bold">{document.user.name}</span>
</Trans>
))
.with(
DocumentSource.DOCUMENT,
DocumentSource.TEMPLATE,
DocumentSource.NONE,
() => (
<Trans>
Document created by{' '}
<span className="font-bold">{document.user.name}</span>
</Trans>
),
)
.with(DocumentSource.TEMPLATE_DIRECT_LINK, () => (
<Trans>
Document created using a <span className="font-bold">direct link</span>

View File

@ -8,24 +8,21 @@ import { Link } from 'react-router';
import { RECIPIENT_ROLES_DESCRIPTION } from '@documenso/lib/constants/recipient-roles';
import { isTemplateRecipientEmailPlaceholder } from '@documenso/lib/constants/template';
import { extractInitials } from '@documenso/lib/utils/recipient-formatter';
import type { Template } from '@documenso/prisma/types/template-legacy-schema';
import { AvatarWithText } from '@documenso/ui/primitives/avatar';
export type TemplatePageViewRecipientsProps = {
template: Template & {
recipients: Recipient[];
};
recipients: Recipient[];
envelopeId: string;
templateRootPath: string;
};
export const TemplatePageViewRecipients = ({
template,
recipients,
envelopeId,
templateRootPath,
}: TemplatePageViewRecipientsProps) => {
const { _ } = useLingui();
const recipients = template.recipients;
return (
<section className="dark:bg-background border-border bg-widget flex flex-col rounded-xl border">
<div className="flex flex-row items-center justify-between px-4 py-3">
@ -34,7 +31,7 @@ export const TemplatePageViewRecipients = ({
</h1>
<Link
to={`${templateRootPath}/${template.id}/edit?step=signers`}
to={`${templateRootPath}/${envelopeId}/edit?step=signers`}
title={_(msg`Modify recipients`)}
className="flex flex-row items-center justify-between"
>