mirror of
https://github.com/documenso/documenso.git
synced 2025-11-21 04:01:45 +10:00
chore: merge main
This commit is contained in:
@ -21,6 +21,7 @@ import {
|
||||
ZSendDocumentForSigningMutationSchema,
|
||||
ZSuccessfulDeleteTemplateResponseSchema,
|
||||
ZSuccessfulDocumentResponseSchema,
|
||||
ZSuccessfulFieldCreationResponseSchema,
|
||||
ZSuccessfulFieldResponseSchema,
|
||||
ZSuccessfulGetDocumentResponseSchema,
|
||||
ZSuccessfulGetTemplateResponseSchema,
|
||||
@ -236,7 +237,7 @@ export const ApiContractV1 = c.router(
|
||||
path: '/api/v1/documents/:id/fields',
|
||||
body: ZCreateFieldMutationSchema,
|
||||
responses: {
|
||||
200: ZSuccessfulFieldResponseSchema,
|
||||
200: ZSuccessfulFieldCreationResponseSchema,
|
||||
400: ZUnsuccessfulResponseSchema,
|
||||
401: ZUnsuccessfulResponseSchema,
|
||||
404: ZUnsuccessfulResponseSchema,
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
import { createNextRoute } from '@ts-rest/next';
|
||||
import { match } from 'ts-pattern';
|
||||
|
||||
import { getServerLimits } from '@documenso/ee/server-only/limits/server';
|
||||
import { NEXT_PUBLIC_WEBAPP_URL } from '@documenso/lib/constants/app';
|
||||
@ -15,7 +16,6 @@ import { getDocumentById } from '@documenso/lib/server-only/document/get-documen
|
||||
import { resendDocument } from '@documenso/lib/server-only/document/resend-document';
|
||||
import { sendDocument } from '@documenso/lib/server-only/document/send-document';
|
||||
import { updateDocument } from '@documenso/lib/server-only/document/update-document';
|
||||
import { createField } from '@documenso/lib/server-only/field/create-field';
|
||||
import { deleteField } from '@documenso/lib/server-only/field/delete-field';
|
||||
import { getFieldById } from '@documenso/lib/server-only/field/get-field-by-id';
|
||||
import { updateField } from '@documenso/lib/server-only/field/update-field';
|
||||
@ -32,6 +32,13 @@ import { deleteTemplate } from '@documenso/lib/server-only/template/delete-templ
|
||||
import { findTemplates } from '@documenso/lib/server-only/template/find-templates';
|
||||
import { getTemplateById } from '@documenso/lib/server-only/template/get-template-by-id';
|
||||
import { ZFieldMetaSchema } from '@documenso/lib/types/field-meta';
|
||||
import {
|
||||
ZCheckboxFieldMeta,
|
||||
ZDropdownFieldMeta,
|
||||
ZNumberFieldMeta,
|
||||
ZRadioFieldMeta,
|
||||
ZTextFieldMeta,
|
||||
} from '@documenso/lib/types/field-meta';
|
||||
import { extractNextApiRequestMetadata } from '@documenso/lib/universal/extract-request-metadata';
|
||||
import { getFile } from '@documenso/lib/universal/upload/get-file';
|
||||
import { putPdfFile } from '@documenso/lib/universal/upload/put-file';
|
||||
@ -39,6 +46,8 @@ import {
|
||||
getPresignGetUrl,
|
||||
getPresignPostUrl,
|
||||
} from '@documenso/lib/universal/upload/server-actions';
|
||||
import { createDocumentAuditLogData } from '@documenso/lib/utils/document-audit-logs';
|
||||
import { prisma } from '@documenso/prisma';
|
||||
import { DocumentDataType, DocumentStatus, SigningStatus } from '@documenso/prisma/client';
|
||||
|
||||
import { ApiContractV1 } from './contract';
|
||||
@ -870,100 +879,167 @@ export const ApiContractV1Implementation = createNextRoute(ApiContractV1, {
|
||||
|
||||
createField: authenticatedMiddleware(async (args, user, team) => {
|
||||
const { id: documentId } = args.params;
|
||||
const { recipientId, type, pageNumber, pageWidth, pageHeight, pageX, pageY, fieldMeta } =
|
||||
args.body;
|
||||
const fields = Array.isArray(args.body) ? args.body : [args.body];
|
||||
|
||||
if (pageNumber <= 0) {
|
||||
return {
|
||||
status: 400,
|
||||
body: {
|
||||
message: 'Invalid page number',
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
const document = await getDocumentById({
|
||||
id: Number(documentId),
|
||||
userId: user.id,
|
||||
teamId: team?.id,
|
||||
const document = await prisma.document.findFirst({
|
||||
select: { id: true, status: true },
|
||||
where: {
|
||||
id: Number(documentId),
|
||||
...(team?.id
|
||||
? {
|
||||
team: {
|
||||
id: team.id,
|
||||
members: { some: { userId: user.id } },
|
||||
},
|
||||
}
|
||||
: {
|
||||
userId: user.id,
|
||||
teamId: null,
|
||||
}),
|
||||
},
|
||||
});
|
||||
|
||||
if (!document) {
|
||||
return {
|
||||
status: 404,
|
||||
body: {
|
||||
message: 'Document not found',
|
||||
},
|
||||
body: { message: 'Document not found' },
|
||||
};
|
||||
}
|
||||
|
||||
if (document.status === DocumentStatus.COMPLETED) {
|
||||
return {
|
||||
status: 400,
|
||||
body: {
|
||||
message: 'Document is already completed',
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
const recipient = await getRecipientById({
|
||||
id: Number(recipientId),
|
||||
documentId: Number(documentId),
|
||||
}).catch(() => null);
|
||||
|
||||
if (!recipient) {
|
||||
return {
|
||||
status: 404,
|
||||
body: {
|
||||
message: 'Recipient not found',
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
if (recipient.signingStatus === SigningStatus.SIGNED) {
|
||||
return {
|
||||
status: 400,
|
||||
body: {
|
||||
message: 'Recipient has already signed the document',
|
||||
},
|
||||
body: { message: 'Document is already completed' },
|
||||
};
|
||||
}
|
||||
|
||||
try {
|
||||
const field = await createField({
|
||||
documentId: Number(documentId),
|
||||
recipientId: Number(recipientId),
|
||||
userId: user.id,
|
||||
teamId: team?.id,
|
||||
type,
|
||||
pageNumber,
|
||||
pageX,
|
||||
pageY,
|
||||
pageWidth,
|
||||
pageHeight,
|
||||
fieldMeta,
|
||||
requestMetadata: extractNextApiRequestMetadata(args.req),
|
||||
});
|
||||
const createdFields = await prisma.$transaction(async (tx) => {
|
||||
return Promise.all(
|
||||
fields.map(async (fieldData) => {
|
||||
const {
|
||||
recipientId,
|
||||
type,
|
||||
pageNumber,
|
||||
pageWidth,
|
||||
pageHeight,
|
||||
pageX,
|
||||
pageY,
|
||||
fieldMeta,
|
||||
} = fieldData;
|
||||
|
||||
const remappedField = {
|
||||
id: field.id,
|
||||
documentId: field.documentId,
|
||||
recipientId: field.recipientId ?? -1,
|
||||
type: field.type,
|
||||
pageNumber: field.page,
|
||||
pageX: Number(field.positionX),
|
||||
pageY: Number(field.positionY),
|
||||
pageWidth: Number(field.width),
|
||||
pageHeight: Number(field.height),
|
||||
customText: field.customText,
|
||||
fieldMeta: ZFieldMetaSchema.parse(field.fieldMeta),
|
||||
inserted: field.inserted,
|
||||
};
|
||||
if (pageNumber <= 0) {
|
||||
throw new Error('Invalid page number');
|
||||
}
|
||||
|
||||
const recipient = await getRecipientById({
|
||||
id: Number(recipientId),
|
||||
documentId: Number(documentId),
|
||||
}).catch(() => null);
|
||||
|
||||
if (!recipient) {
|
||||
throw new Error('Recipient not found');
|
||||
}
|
||||
|
||||
if (recipient.signingStatus === SigningStatus.SIGNED) {
|
||||
throw new Error('Recipient has already signed the document');
|
||||
}
|
||||
|
||||
const advancedField = ['NUMBER', 'RADIO', 'CHECKBOX', 'DROPDOWN', 'TEXT'].includes(
|
||||
type,
|
||||
);
|
||||
|
||||
if (advancedField && !fieldMeta) {
|
||||
throw new Error(
|
||||
'Field meta is required for this type of field. Please provide the appropriate field meta object.',
|
||||
);
|
||||
}
|
||||
|
||||
if (fieldMeta && fieldMeta.type.toLowerCase() !== String(type).toLowerCase()) {
|
||||
throw new Error('Field meta type does not match the field type');
|
||||
}
|
||||
|
||||
const result = match(type)
|
||||
.with('RADIO', () => ZRadioFieldMeta.safeParse(fieldMeta))
|
||||
.with('CHECKBOX', () => ZCheckboxFieldMeta.safeParse(fieldMeta))
|
||||
.with('DROPDOWN', () => ZDropdownFieldMeta.safeParse(fieldMeta))
|
||||
.with('NUMBER', () => ZNumberFieldMeta.safeParse(fieldMeta))
|
||||
.with('TEXT', () => ZTextFieldMeta.safeParse(fieldMeta))
|
||||
.with('SIGNATURE', 'INITIALS', 'DATE', 'EMAIL', 'NAME', () => ({
|
||||
success: true,
|
||||
data: {},
|
||||
}))
|
||||
.with('FREE_SIGNATURE', () => ({
|
||||
success: false,
|
||||
error: 'FREE_SIGNATURE is not supported',
|
||||
data: {},
|
||||
}))
|
||||
.exhaustive();
|
||||
|
||||
if (!result.success) {
|
||||
throw new Error('Field meta parsing failed');
|
||||
}
|
||||
|
||||
const field = await tx.field.create({
|
||||
data: {
|
||||
documentId: Number(documentId),
|
||||
recipientId: Number(recipientId),
|
||||
type,
|
||||
page: pageNumber,
|
||||
positionX: pageX,
|
||||
positionY: pageY,
|
||||
width: pageWidth,
|
||||
height: pageHeight,
|
||||
customText: '',
|
||||
inserted: false,
|
||||
fieldMeta: result.data,
|
||||
},
|
||||
include: {
|
||||
Recipient: true,
|
||||
},
|
||||
});
|
||||
|
||||
await tx.documentAuditLog.create({
|
||||
data: createDocumentAuditLogData({
|
||||
type: 'FIELD_CREATED',
|
||||
documentId: Number(documentId),
|
||||
user: {
|
||||
id: team?.id ?? user.id,
|
||||
email: team?.name ?? user.email,
|
||||
name: team ? '' : user.name,
|
||||
},
|
||||
data: {
|
||||
fieldId: field.secondaryId,
|
||||
fieldRecipientEmail: field.Recipient?.email ?? '',
|
||||
fieldRecipientId: recipientId,
|
||||
fieldType: field.type,
|
||||
},
|
||||
requestMetadata: extractNextApiRequestMetadata(args.req),
|
||||
}),
|
||||
});
|
||||
|
||||
return {
|
||||
id: field.id,
|
||||
documentId: Number(field.documentId),
|
||||
recipientId: field.recipientId ?? -1,
|
||||
type: field.type,
|
||||
pageNumber: field.page,
|
||||
pageX: Number(field.positionX),
|
||||
pageY: Number(field.positionY),
|
||||
pageWidth: Number(field.width),
|
||||
pageHeight: Number(field.height),
|
||||
customText: field.customText,
|
||||
fieldMeta: ZFieldMetaSchema.parse(field.fieldMeta),
|
||||
inserted: field.inserted,
|
||||
};
|
||||
}),
|
||||
);
|
||||
});
|
||||
|
||||
return {
|
||||
status: 200,
|
||||
body: {
|
||||
...remappedField,
|
||||
fields: createdFields,
|
||||
documentId: Number(documentId),
|
||||
},
|
||||
};
|
||||
@ -974,7 +1050,8 @@ export const ApiContractV1Implementation = createNextRoute(ApiContractV1, {
|
||||
|
||||
updateField: authenticatedMiddleware(async (args, user, team) => {
|
||||
const { id: documentId, fieldId } = args.params;
|
||||
const { recipientId, type, pageNumber, pageWidth, pageHeight, pageX, pageY } = args.body;
|
||||
const { recipientId, type, pageNumber, pageWidth, pageHeight, pageX, pageY, fieldMeta } =
|
||||
args.body;
|
||||
|
||||
const document = await getDocumentById({
|
||||
id: Number(documentId),
|
||||
@ -1036,6 +1113,7 @@ export const ApiContractV1Implementation = createNextRoute(ApiContractV1, {
|
||||
pageWidth,
|
||||
pageHeight,
|
||||
requestMetadata: extractNextApiRequestMetadata(args.req),
|
||||
fieldMeta: fieldMeta ? ZFieldMetaSchema.parse(fieldMeta) : undefined,
|
||||
});
|
||||
|
||||
const remappedField = {
|
||||
|
||||
@ -293,7 +293,7 @@ export type TSuccessfulRecipientResponseSchema = z.infer<typeof ZSuccessfulRecip
|
||||
/**
|
||||
* Fields
|
||||
*/
|
||||
export const ZCreateFieldMutationSchema = z.object({
|
||||
const ZCreateFieldSchema = z.object({
|
||||
recipientId: z.number(),
|
||||
type: z.nativeEnum(FieldType),
|
||||
pageNumber: z.number(),
|
||||
@ -301,12 +301,17 @@ export const ZCreateFieldMutationSchema = z.object({
|
||||
pageY: z.number(),
|
||||
pageWidth: z.number(),
|
||||
pageHeight: z.number(),
|
||||
fieldMeta: ZFieldMetaSchema,
|
||||
fieldMeta: ZFieldMetaSchema.openapi({}),
|
||||
});
|
||||
|
||||
export const ZCreateFieldMutationSchema = z.union([
|
||||
ZCreateFieldSchema,
|
||||
z.array(ZCreateFieldSchema).min(1),
|
||||
]);
|
||||
|
||||
export type TCreateFieldMutationSchema = z.infer<typeof ZCreateFieldMutationSchema>;
|
||||
|
||||
export const ZUpdateFieldMutationSchema = ZCreateFieldMutationSchema.partial();
|
||||
export const ZUpdateFieldMutationSchema = ZCreateFieldSchema.partial();
|
||||
|
||||
export type TUpdateFieldMutationSchema = z.infer<typeof ZUpdateFieldMutationSchema>;
|
||||
|
||||
@ -314,6 +319,26 @@ export const ZDeleteFieldMutationSchema = null;
|
||||
|
||||
export type TDeleteFieldMutationSchema = typeof ZDeleteFieldMutationSchema;
|
||||
|
||||
const ZSuccessfulFieldSchema = z.object({
|
||||
id: z.number(),
|
||||
documentId: z.number(),
|
||||
recipientId: z.number(),
|
||||
type: z.nativeEnum(FieldType),
|
||||
pageNumber: z.number(),
|
||||
pageX: z.number(),
|
||||
pageY: z.number(),
|
||||
pageWidth: z.number(),
|
||||
pageHeight: z.number(),
|
||||
customText: z.string(),
|
||||
fieldMeta: ZFieldMetaSchema,
|
||||
inserted: z.boolean(),
|
||||
});
|
||||
|
||||
export const ZSuccessfulFieldCreationResponseSchema = z.object({
|
||||
fields: z.union([ZSuccessfulFieldSchema, z.array(ZSuccessfulFieldSchema)]),
|
||||
documentId: z.number(),
|
||||
});
|
||||
|
||||
export const ZSuccessfulFieldResponseSchema = z.object({
|
||||
id: z.number(),
|
||||
documentId: z.number(),
|
||||
|
||||
@ -17,9 +17,9 @@
|
||||
"@documenso/prisma": "*",
|
||||
"luxon": "^3.4.0",
|
||||
"micro": "^10.0.1",
|
||||
"next": "14.0.3",
|
||||
"next": "14.2.6",
|
||||
"next-auth": "4.24.5",
|
||||
"react": "18.2.0",
|
||||
"react": "^18",
|
||||
"ts-pattern": "^5.0.5",
|
||||
"zod": "^3.22.4"
|
||||
}
|
||||
|
||||
60
packages/lib/client-only/hooks/use-throttle-fn.ts
Normal file
60
packages/lib/client-only/hooks/use-throttle-fn.ts
Normal file
@ -0,0 +1,60 @@
|
||||
import { useCallback, useRef, useState } from 'react';
|
||||
|
||||
type ThrottleOptions = {
|
||||
leading?: boolean;
|
||||
trailing?: boolean;
|
||||
};
|
||||
|
||||
export function useThrottleFn<T extends (...args: unknown[]) => unknown>(
|
||||
fn: T,
|
||||
ms = 500,
|
||||
options: ThrottleOptions = {},
|
||||
): [(...args: Parameters<T>) => void, boolean, () => void] {
|
||||
const [isThrottling, setIsThrottling] = useState(false);
|
||||
const $isThrottling = useRef(false);
|
||||
|
||||
const $timeout = useRef<NodeJS.Timeout | null>(null);
|
||||
const $lastArgs = useRef<Parameters<T> | null>(null);
|
||||
|
||||
const { leading = true, trailing = true } = options;
|
||||
|
||||
const $setIsThrottling = useCallback((value: boolean) => {
|
||||
$isThrottling.current = value;
|
||||
setIsThrottling(value);
|
||||
}, []);
|
||||
|
||||
const throttledFn = useCallback(
|
||||
(...args: Parameters<T>) => {
|
||||
if (!$isThrottling.current) {
|
||||
$setIsThrottling(true);
|
||||
if (leading) {
|
||||
fn(...args);
|
||||
} else {
|
||||
$lastArgs.current = args;
|
||||
}
|
||||
|
||||
$timeout.current = setTimeout(() => {
|
||||
if (trailing && $lastArgs.current) {
|
||||
fn(...$lastArgs.current);
|
||||
$lastArgs.current = null;
|
||||
}
|
||||
$setIsThrottling(false);
|
||||
}, ms);
|
||||
} else {
|
||||
$lastArgs.current = args;
|
||||
}
|
||||
},
|
||||
[fn, ms, leading, trailing, $setIsThrottling],
|
||||
);
|
||||
|
||||
const cancel = useCallback(() => {
|
||||
if ($timeout.current) {
|
||||
clearTimeout($timeout.current);
|
||||
$timeout.current = null;
|
||||
$setIsThrottling(false);
|
||||
$lastArgs.current = null;
|
||||
}
|
||||
}, [$setIsThrottling]);
|
||||
|
||||
return [throttledFn, isThrottling, cancel];
|
||||
}
|
||||
@ -41,13 +41,13 @@
|
||||
"luxon": "^3.4.0",
|
||||
"micro": "^10.0.1",
|
||||
"nanoid": "^4.0.2",
|
||||
"next": "14.0.3",
|
||||
"next": "14.2.6",
|
||||
"next-auth": "4.24.5",
|
||||
"oslo": "^0.17.0",
|
||||
"pdf-lib": "^1.17.1",
|
||||
"pg": "^8.11.3",
|
||||
"playwright": "1.43.0",
|
||||
"react": "18.2.0",
|
||||
"react": "^18",
|
||||
"remeda": "^1.27.1",
|
||||
"sharp": "0.32.6",
|
||||
"stripe": "^12.7.0",
|
||||
|
||||
@ -147,7 +147,7 @@ export const getDocumentAndRecipientByToken = async ({
|
||||
},
|
||||
});
|
||||
|
||||
const recipient = result.Recipient[0];
|
||||
const [recipient] = result.Recipient;
|
||||
|
||||
// Sanity check, should not be possible.
|
||||
if (!recipient) {
|
||||
|
||||
@ -110,24 +110,21 @@ export const createField = async ({
|
||||
}
|
||||
|
||||
const result = match(type)
|
||||
.with('RADIO', () => {
|
||||
return ZRadioFieldMeta.safeParse(fieldMeta);
|
||||
})
|
||||
.with('CHECKBOX', () => {
|
||||
return ZCheckboxFieldMeta.safeParse(fieldMeta);
|
||||
})
|
||||
.with('DROPDOWN', () => {
|
||||
return ZDropdownFieldMeta.safeParse(fieldMeta);
|
||||
})
|
||||
.with('NUMBER', () => {
|
||||
return ZNumberFieldMeta.safeParse(fieldMeta);
|
||||
})
|
||||
.with('TEXT', () => {
|
||||
return ZTextFieldMeta.safeParse(fieldMeta);
|
||||
})
|
||||
.otherwise(() => {
|
||||
return { success: false, data: {} };
|
||||
});
|
||||
.with('RADIO', () => ZRadioFieldMeta.safeParse(fieldMeta))
|
||||
.with('CHECKBOX', () => ZCheckboxFieldMeta.safeParse(fieldMeta))
|
||||
.with('DROPDOWN', () => ZDropdownFieldMeta.safeParse(fieldMeta))
|
||||
.with('NUMBER', () => ZNumberFieldMeta.safeParse(fieldMeta))
|
||||
.with('TEXT', () => ZTextFieldMeta.safeParse(fieldMeta))
|
||||
.with('SIGNATURE', 'INITIALS', 'DATE', 'EMAIL', 'NAME', () => ({
|
||||
success: true,
|
||||
data: {},
|
||||
}))
|
||||
.with('FREE_SIGNATURE', () => ({
|
||||
success: false,
|
||||
error: 'FREE_SIGNATURE is not supported',
|
||||
data: {},
|
||||
}))
|
||||
.exhaustive();
|
||||
|
||||
if (!result.success) {
|
||||
throw new Error('Field meta parsing failed');
|
||||
@ -145,7 +142,7 @@ export const createField = async ({
|
||||
height: pageHeight,
|
||||
customText: '',
|
||||
inserted: false,
|
||||
fieldMeta: advancedField ? result.data : undefined,
|
||||
fieldMeta: result.data,
|
||||
},
|
||||
include: {
|
||||
Recipient: true,
|
||||
|
||||
@ -37,6 +37,10 @@ export const updateField = async ({
|
||||
requestMetadata,
|
||||
fieldMeta,
|
||||
}: UpdateFieldOptions) => {
|
||||
if (type === 'FREE_SIGNATURE') {
|
||||
throw new Error('Cannot update a FREE_SIGNATURE field');
|
||||
}
|
||||
|
||||
const oldField = await prisma.field.findFirstOrThrow({
|
||||
where: {
|
||||
id: fieldId,
|
||||
@ -61,6 +65,11 @@ export const updateField = async ({
|
||||
},
|
||||
});
|
||||
|
||||
const newFieldMeta = {
|
||||
...(oldField.fieldMeta as FieldMeta),
|
||||
...fieldMeta,
|
||||
};
|
||||
|
||||
const field = prisma.$transaction(async (tx) => {
|
||||
const updatedField = await tx.field.update({
|
||||
where: {
|
||||
@ -74,13 +83,39 @@ export const updateField = async ({
|
||||
positionY: pageY,
|
||||
width: pageWidth,
|
||||
height: pageHeight,
|
||||
fieldMeta,
|
||||
fieldMeta: newFieldMeta,
|
||||
},
|
||||
include: {
|
||||
Recipient: true,
|
||||
},
|
||||
});
|
||||
|
||||
const user = await prisma.user.findFirstOrThrow({
|
||||
where: {
|
||||
id: userId,
|
||||
},
|
||||
select: {
|
||||
id: true,
|
||||
name: true,
|
||||
email: true,
|
||||
},
|
||||
});
|
||||
|
||||
let team: Team | null = null;
|
||||
|
||||
if (teamId) {
|
||||
team = await prisma.team.findFirst({
|
||||
where: {
|
||||
id: teamId,
|
||||
members: {
|
||||
some: {
|
||||
userId,
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
await tx.documentAuditLog.create({
|
||||
data: createDocumentAuditLogData({
|
||||
type: DOCUMENT_AUDIT_LOG_TYPE.FIELD_UPDATED,
|
||||
@ -104,31 +139,5 @@ export const updateField = async ({
|
||||
return updatedField;
|
||||
});
|
||||
|
||||
const user = await prisma.user.findFirstOrThrow({
|
||||
where: {
|
||||
id: userId,
|
||||
},
|
||||
select: {
|
||||
id: true,
|
||||
name: true,
|
||||
email: true,
|
||||
},
|
||||
});
|
||||
|
||||
let team: Team | null = null;
|
||||
|
||||
if (teamId) {
|
||||
team = await prisma.team.findFirst({
|
||||
where: {
|
||||
id: teamId,
|
||||
members: {
|
||||
some: {
|
||||
userId,
|
||||
},
|
||||
},
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
return field;
|
||||
};
|
||||
|
||||
@ -0,0 +1,21 @@
|
||||
'use server';
|
||||
|
||||
import { prisma } from '@documenso/prisma';
|
||||
import { SubscriptionStatus } from '@documenso/prisma/client';
|
||||
|
||||
export type GetActiveSubscriptionsByUserIdOptions = {
|
||||
userId: number;
|
||||
};
|
||||
|
||||
export const getActiveSubscriptionsByUserId = async ({
|
||||
userId,
|
||||
}: GetActiveSubscriptionsByUserIdOptions) => {
|
||||
return await prisma.subscription.findMany({
|
||||
where: {
|
||||
userId,
|
||||
status: {
|
||||
not: SubscriptionStatus.INACTIVE,
|
||||
},
|
||||
},
|
||||
});
|
||||
};
|
||||
@ -210,7 +210,7 @@ export const createDocumentFromDirectTemplate = async ({
|
||||
|
||||
const initialRequestTime = new Date();
|
||||
|
||||
const { documentId, directRecipientToken } = await prisma.$transaction(async (tx) => {
|
||||
const { documentId, recipientId, token } = await prisma.$transaction(async (tx) => {
|
||||
const documentData = await tx.documentData.create({
|
||||
data: {
|
||||
type: template.templateDocumentData.type,
|
||||
@ -539,8 +539,9 @@ export const createDocumentFromDirectTemplate = async ({
|
||||
});
|
||||
|
||||
return {
|
||||
token: createdDirectRecipient.token,
|
||||
documentId: document.id,
|
||||
directRecipientToken: createdDirectRecipient.token,
|
||||
recipientId: createdDirectRecipient.id,
|
||||
};
|
||||
});
|
||||
|
||||
@ -559,5 +560,9 @@ export const createDocumentFromDirectTemplate = async ({
|
||||
// Log and reseal as required until we configure middleware.
|
||||
}
|
||||
|
||||
return directRecipientToken;
|
||||
return {
|
||||
token,
|
||||
documentId,
|
||||
recipientId,
|
||||
};
|
||||
};
|
||||
|
||||
@ -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:369
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:370
|
||||
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:755
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:756
|
||||
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:370
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:371
|
||||
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:651
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:652
|
||||
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:781
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:782
|
||||
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:599
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:600
|
||||
#: 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:625
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:626
|
||||
#: 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:464
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:465
|
||||
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:480
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:481
|
||||
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:703
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:704
|
||||
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:729
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:730
|
||||
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:797
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:798
|
||||
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:547
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:548
|
||||
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:677
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:678
|
||||
msgid "Text"
|
||||
msgstr "Text"
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@ -26,15 +26,15 @@ msgstr ""
|
||||
msgid "\"{documentTitle}\" has been successfully deleted"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:75
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:76
|
||||
msgid "({0}) has invited you to approve this document"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:72
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:73
|
||||
msgid "({0}) has invited you to sign this document"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:69
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:70
|
||||
msgid "({0}) has invited you to view this document"
|
||||
msgstr ""
|
||||
|
||||
@ -500,11 +500,11 @@ msgstr ""
|
||||
#: apps/web/src/components/forms/public-profile-claim-dialog.tsx:113
|
||||
#: apps/web/src/components/forms/public-profile-form.tsx:104
|
||||
#: apps/web/src/components/forms/reset-password.tsx:87
|
||||
#: apps/web/src/components/forms/signin.tsx:230
|
||||
#: apps/web/src/components/forms/signin.tsx:238
|
||||
#: apps/web/src/components/forms/signin.tsx:252
|
||||
#: apps/web/src/components/forms/signin.tsx:265
|
||||
#: apps/web/src/components/forms/signin.tsx:279
|
||||
#: apps/web/src/components/forms/signin.tsx:248
|
||||
#: apps/web/src/components/forms/signin.tsx:256
|
||||
#: apps/web/src/components/forms/signin.tsx:270
|
||||
#: apps/web/src/components/forms/signin.tsx:285
|
||||
#: apps/web/src/components/forms/signin.tsx:301
|
||||
#: apps/web/src/components/forms/signup.tsx:113
|
||||
#: apps/web/src/components/forms/signup.tsx:128
|
||||
#: apps/web/src/components/forms/signup.tsx:142
|
||||
@ -608,7 +608,7 @@ msgid "Background Color"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/forms/2fa/disable-authenticator-app-dialog.tsx:167
|
||||
#: apps/web/src/components/forms/signin.tsx:451
|
||||
#: apps/web/src/components/forms/signin.tsx:473
|
||||
msgid "Backup Code"
|
||||
msgstr ""
|
||||
|
||||
@ -760,6 +760,8 @@ msgstr ""
|
||||
|
||||
#: apps/web/src/app/(recipient)/d/[token]/sign-direct-template.tsx:175
|
||||
#: apps/web/src/app/(signing)/sign/[token]/form.tsx:107
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:435
|
||||
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:314
|
||||
msgid "Click to insert field"
|
||||
msgstr ""
|
||||
|
||||
@ -776,6 +778,8 @@ msgid "Close"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/sign-dialog.tsx:58
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:425
|
||||
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:304
|
||||
#: apps/web/src/components/forms/v2/signup.tsx:522
|
||||
msgid "Complete"
|
||||
msgstr ""
|
||||
@ -1206,6 +1210,10 @@ msgstr ""
|
||||
msgid "Document completed"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/app/embed/completed.tsx:16
|
||||
msgid "Document Completed!"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:142
|
||||
msgid "Document created"
|
||||
msgstr ""
|
||||
@ -1397,11 +1405,13 @@ msgstr ""
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:220
|
||||
#: apps/web/src/app/(recipient)/d/[token]/configure-direct-template.tsx:118
|
||||
#: apps/web/src/app/(signing)/sign/[token]/email-field.tsx:126
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:376
|
||||
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:256
|
||||
#: apps/web/src/components/(teams)/dialogs/add-team-email-dialog.tsx:169
|
||||
#: apps/web/src/components/(teams)/dialogs/update-team-email-dialog.tsx:153
|
||||
#: apps/web/src/components/forms/forgot-password.tsx:81
|
||||
#: apps/web/src/components/forms/profile.tsx:122
|
||||
#: apps/web/src/components/forms/signin.tsx:304
|
||||
#: apps/web/src/components/forms/signin.tsx:326
|
||||
#: apps/web/src/components/forms/signup.tsx:180
|
||||
msgid "Email"
|
||||
msgstr ""
|
||||
@ -1565,12 +1575,14 @@ msgid "File cannot be larger than {APP_DOCUMENT_UPLOAD_SIZE_LIMIT}MB"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/app/(unauthenticated)/forgot-password/page.tsx:21
|
||||
#: apps/web/src/components/forms/signin.tsx:336
|
||||
#: apps/web/src/components/forms/signin.tsx:358
|
||||
msgid "Forgot your password?"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/app/(recipient)/d/[token]/sign-direct-template.tsx:326
|
||||
#: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:193
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:361
|
||||
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:241
|
||||
#: apps/web/src/components/forms/profile.tsx:110
|
||||
#: apps/web/src/components/forms/v2/signup.tsx:300
|
||||
msgid "Full Name"
|
||||
@ -2012,6 +2024,8 @@ msgstr ""
|
||||
msgid "New Template"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:416
|
||||
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:295
|
||||
#: apps/web/src/components/forms/v2/signup.tsx:509
|
||||
msgid "Next"
|
||||
msgstr ""
|
||||
@ -2065,7 +2079,7 @@ msgstr ""
|
||||
msgid "No worries, it happens! Enter your email and we'll email you a special link to reset your password."
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/forms/signin.tsx:142
|
||||
#: apps/web/src/components/forms/signin.tsx:160
|
||||
msgid "Not supported"
|
||||
msgstr ""
|
||||
|
||||
@ -2123,7 +2137,7 @@ msgstr ""
|
||||
msgid "Or"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/forms/signin.tsx:356
|
||||
#: apps/web/src/components/forms/signin.tsx:378
|
||||
msgid "Or continue with"
|
||||
msgstr ""
|
||||
|
||||
@ -2140,7 +2154,7 @@ msgstr ""
|
||||
msgid "Paid"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/forms/signin.tsx:401
|
||||
#: apps/web/src/components/forms/signin.tsx:423
|
||||
msgid "Passkey"
|
||||
msgstr ""
|
||||
|
||||
@ -2173,14 +2187,14 @@ msgstr ""
|
||||
msgid "Passkeys allow you to sign in and authenticate using biometrics, password managers, etc."
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/forms/signin.tsx:143
|
||||
#: apps/web/src/components/forms/signin.tsx:161
|
||||
msgid "Passkeys are not supported on this browser"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/(dashboard)/common/command-menu.tsx:65
|
||||
#: apps/web/src/components/forms/password.tsx:123
|
||||
#: apps/web/src/components/forms/reset-password.tsx:110
|
||||
#: apps/web/src/components/forms/signin.tsx:322
|
||||
#: apps/web/src/components/forms/signin.tsx:344
|
||||
#: apps/web/src/components/forms/signup.tsx:196
|
||||
#: apps/web/src/components/forms/v2/signup.tsx:332
|
||||
msgid "Password"
|
||||
@ -2303,7 +2317,7 @@ msgstr ""
|
||||
msgid "Please try again and make sure you enter the correct email address."
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/forms/signin.tsx:185
|
||||
#: apps/web/src/components/forms/signin.tsx:203
|
||||
msgid "Please try again later or login using your normal details"
|
||||
msgstr ""
|
||||
|
||||
@ -2717,6 +2731,11 @@ msgstr ""
|
||||
msgid "Sign as<0>{0} <1>({1})</1></0>"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:329
|
||||
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:209
|
||||
msgid "Sign document"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/document-action-auth-dialog.tsx:59
|
||||
msgid "Sign field"
|
||||
msgstr ""
|
||||
@ -2727,8 +2746,8 @@ msgid "Sign Here"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/app/not-found.tsx:29
|
||||
#: apps/web/src/components/forms/signin.tsx:349
|
||||
#: apps/web/src/components/forms/signin.tsx:476
|
||||
#: apps/web/src/components/forms/signin.tsx:371
|
||||
#: apps/web/src/components/forms/signin.tsx:498
|
||||
msgid "Sign In"
|
||||
msgstr ""
|
||||
|
||||
@ -2741,6 +2760,11 @@ msgstr ""
|
||||
msgid "Sign Out"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:350
|
||||
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:230
|
||||
msgid "Sign the document to complete the process."
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signing-auth-page.tsx:72
|
||||
msgid "Sign up"
|
||||
msgstr ""
|
||||
@ -2763,6 +2787,8 @@ msgstr ""
|
||||
#: apps/web/src/app/(recipient)/d/[token]/sign-direct-template.tsx:338
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:197
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:227
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:391
|
||||
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:270
|
||||
#: apps/web/src/components/forms/profile.tsx:132
|
||||
msgid "Signature"
|
||||
msgstr ""
|
||||
@ -2779,8 +2805,8 @@ msgstr ""
|
||||
msgid "Signed"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/forms/signin.tsx:349
|
||||
#: apps/web/src/components/forms/signin.tsx:476
|
||||
#: apps/web/src/components/forms/signin.tsx:371
|
||||
#: apps/web/src/components/forms/signin.tsx:498
|
||||
msgid "Signing in..."
|
||||
msgstr ""
|
||||
|
||||
@ -2829,6 +2855,8 @@ msgstr ""
|
||||
#: apps/web/src/app/(teams)/t/[teamUrl]/layout-billing-banner.tsx:53
|
||||
#: apps/web/src/app/(teams)/t/[teamUrl]/settings/team-email-dropdown.tsx:39
|
||||
#: apps/web/src/app/(unauthenticated)/verify-email/[token]/page.tsx:61
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:243
|
||||
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:125
|
||||
#: apps/web/src/components/(teams)/dialogs/create-team-checkout-dialog.tsx:50
|
||||
#: apps/web/src/components/(teams)/dialogs/create-team-checkout-dialog.tsx:99
|
||||
#: apps/web/src/components/(teams)/dialogs/invite-team-member-dialog.tsx:210
|
||||
@ -3122,6 +3150,10 @@ msgstr ""
|
||||
msgid "The document has been successfully moved to the selected team."
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/app/embed/completed.tsx:29
|
||||
msgid "The document is now completed, please follow any instructions provided within the parent application."
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:159
|
||||
msgid "The document was created but could not be sent to recipients."
|
||||
msgstr ""
|
||||
@ -3297,7 +3329,7 @@ msgstr ""
|
||||
msgid "This passkey has already been registered."
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/forms/signin.tsx:182
|
||||
#: apps/web/src/components/forms/signin.tsx:200
|
||||
msgid "This passkey is not configured for this application. Please login and add one in the user settings."
|
||||
msgstr ""
|
||||
|
||||
@ -3305,7 +3337,7 @@ msgstr ""
|
||||
msgid "This price includes minimum 5 seats."
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/forms/signin.tsx:184
|
||||
#: apps/web/src/components/forms/signin.tsx:202
|
||||
msgid "This session has expired. Please try again."
|
||||
msgstr ""
|
||||
|
||||
@ -3384,6 +3416,10 @@ msgstr ""
|
||||
msgid "To mark this document as viewed, you need to be logged in as <0>{0}</0>"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/app/embed/authenticate.tsx:21
|
||||
msgid "To view this document you need to be signed into your account, please sign in to continue."
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/app/(dashboard)/settings/public-profile/public-profile-page-view.tsx:178
|
||||
msgid "Toggle the switch to hide your profile from the public."
|
||||
msgstr ""
|
||||
@ -3465,7 +3501,7 @@ msgstr ""
|
||||
msgid "Two factor authentication recovery codes are used to access your account in the event that you lose access to your authenticator app."
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/forms/signin.tsx:414
|
||||
#: apps/web/src/components/forms/signin.tsx:436
|
||||
msgid "Two-Factor Authentication"
|
||||
msgstr ""
|
||||
|
||||
@ -3564,8 +3600,8 @@ msgstr ""
|
||||
msgid "Unable to setup two-factor authentication"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/forms/signin.tsx:229
|
||||
#: apps/web/src/components/forms/signin.tsx:237
|
||||
#: apps/web/src/components/forms/signin.tsx:247
|
||||
#: apps/web/src/components/forms/signin.tsx:255
|
||||
msgid "Unable to sign in"
|
||||
msgstr ""
|
||||
|
||||
@ -3671,12 +3707,12 @@ msgid "Uploaded file not an allowed file type"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/forms/2fa/disable-authenticator-app-dialog.tsx:187
|
||||
#: apps/web/src/components/forms/signin.tsx:471
|
||||
#: apps/web/src/components/forms/signin.tsx:493
|
||||
msgid "Use Authenticator"
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/forms/2fa/disable-authenticator-app-dialog.tsx:185
|
||||
#: apps/web/src/components/forms/signin.tsx:469
|
||||
#: apps/web/src/components/forms/signin.tsx:491
|
||||
msgid "Use Backup Code"
|
||||
msgstr ""
|
||||
|
||||
@ -3895,9 +3931,9 @@ msgid "We encountered an unknown error while attempting to save your details. Pl
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/components/forms/profile.tsx:89
|
||||
#: apps/web/src/components/forms/signin.tsx:254
|
||||
#: apps/web/src/components/forms/signin.tsx:267
|
||||
#: apps/web/src/components/forms/signin.tsx:281
|
||||
#: apps/web/src/components/forms/signin.tsx:272
|
||||
#: apps/web/src/components/forms/signin.tsx:287
|
||||
#: apps/web/src/components/forms/signin.tsx:303
|
||||
msgid "We encountered an unknown error while attempting to sign you In. Please try again later."
|
||||
msgstr ""
|
||||
|
||||
@ -3981,6 +4017,8 @@ msgid "We were unable to setup two-factor authentication for your account. Pleas
|
||||
msgstr ""
|
||||
|
||||
#: apps/web/src/app/(recipient)/d/[token]/direct-template.tsx:119
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:245
|
||||
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:127
|
||||
msgid "We were unable to submit this document at this time. Please try again later."
|
||||
msgstr ""
|
||||
|
||||
|
||||
@ -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:369
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:370
|
||||
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:755
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:756
|
||||
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:370
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:371
|
||||
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:651
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:652
|
||||
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:781
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:782
|
||||
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:599
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:600
|
||||
#: 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:625
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:626
|
||||
#: 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:464
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:465
|
||||
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:480
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:481
|
||||
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:703
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:704
|
||||
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:729
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:730
|
||||
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:797
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:798
|
||||
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:547
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:548
|
||||
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:677
|
||||
#: packages/ui/primitives/template-flow/add-template-fields.tsx:678
|
||||
msgid "Text"
|
||||
msgstr "Text"
|
||||
|
||||
|
||||
File diff suppressed because one or more lines are too long
@ -21,15 +21,15 @@ msgstr "\"{0}\" will appear on the document as it has a timezone of \"{timezone}
|
||||
msgid "\"{documentTitle}\" has been successfully deleted"
|
||||
msgstr "\"{documentTitle}\" has been successfully deleted"
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:75
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:76
|
||||
msgid "({0}) has invited you to approve this document"
|
||||
msgstr "({0}) has invited you to approve this document"
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:72
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:73
|
||||
msgid "({0}) has invited you to sign this document"
|
||||
msgstr "({0}) has invited you to sign this document"
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:69
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signing-page-view.tsx:70
|
||||
msgid "({0}) has invited you to view this document"
|
||||
msgstr "({0}) has invited you to view this document"
|
||||
|
||||
@ -495,11 +495,11 @@ msgstr "An error occurred while uploading your document."
|
||||
#: apps/web/src/components/forms/public-profile-claim-dialog.tsx:113
|
||||
#: apps/web/src/components/forms/public-profile-form.tsx:104
|
||||
#: apps/web/src/components/forms/reset-password.tsx:87
|
||||
#: apps/web/src/components/forms/signin.tsx:230
|
||||
#: apps/web/src/components/forms/signin.tsx:238
|
||||
#: apps/web/src/components/forms/signin.tsx:252
|
||||
#: apps/web/src/components/forms/signin.tsx:265
|
||||
#: apps/web/src/components/forms/signin.tsx:279
|
||||
#: apps/web/src/components/forms/signin.tsx:248
|
||||
#: apps/web/src/components/forms/signin.tsx:256
|
||||
#: apps/web/src/components/forms/signin.tsx:270
|
||||
#: apps/web/src/components/forms/signin.tsx:285
|
||||
#: apps/web/src/components/forms/signin.tsx:301
|
||||
#: apps/web/src/components/forms/signup.tsx:113
|
||||
#: apps/web/src/components/forms/signup.tsx:128
|
||||
#: apps/web/src/components/forms/signup.tsx:142
|
||||
@ -603,7 +603,7 @@ msgid "Background Color"
|
||||
msgstr "Background Color"
|
||||
|
||||
#: apps/web/src/components/forms/2fa/disable-authenticator-app-dialog.tsx:167
|
||||
#: apps/web/src/components/forms/signin.tsx:451
|
||||
#: apps/web/src/components/forms/signin.tsx:473
|
||||
msgid "Backup Code"
|
||||
msgstr "Backup Code"
|
||||
|
||||
@ -755,6 +755,8 @@ msgstr "Click to copy signing link for sending to recipient"
|
||||
|
||||
#: apps/web/src/app/(recipient)/d/[token]/sign-direct-template.tsx:175
|
||||
#: apps/web/src/app/(signing)/sign/[token]/form.tsx:107
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:435
|
||||
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:314
|
||||
msgid "Click to insert field"
|
||||
msgstr "Click to insert field"
|
||||
|
||||
@ -771,6 +773,8 @@ msgid "Close"
|
||||
msgstr "Close"
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/sign-dialog.tsx:58
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:425
|
||||
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:304
|
||||
#: apps/web/src/components/forms/v2/signup.tsx:522
|
||||
msgid "Complete"
|
||||
msgstr "Complete"
|
||||
@ -1201,6 +1205,10 @@ msgstr "Document Cancelled"
|
||||
msgid "Document completed"
|
||||
msgstr "Document completed"
|
||||
|
||||
#: apps/web/src/app/embed/completed.tsx:16
|
||||
msgid "Document Completed!"
|
||||
msgstr "Document Completed!"
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:142
|
||||
msgid "Document created"
|
||||
msgstr "Document created"
|
||||
@ -1392,11 +1400,13 @@ msgstr "Edit webhook"
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:220
|
||||
#: apps/web/src/app/(recipient)/d/[token]/configure-direct-template.tsx:118
|
||||
#: apps/web/src/app/(signing)/sign/[token]/email-field.tsx:126
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:376
|
||||
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:256
|
||||
#: apps/web/src/components/(teams)/dialogs/add-team-email-dialog.tsx:169
|
||||
#: apps/web/src/components/(teams)/dialogs/update-team-email-dialog.tsx:153
|
||||
#: apps/web/src/components/forms/forgot-password.tsx:81
|
||||
#: apps/web/src/components/forms/profile.tsx:122
|
||||
#: apps/web/src/components/forms/signin.tsx:304
|
||||
#: apps/web/src/components/forms/signin.tsx:326
|
||||
#: apps/web/src/components/forms/signup.tsx:180
|
||||
msgid "Email"
|
||||
msgstr "Email"
|
||||
@ -1560,12 +1570,14 @@ msgid "File cannot be larger than {APP_DOCUMENT_UPLOAD_SIZE_LIMIT}MB"
|
||||
msgstr "File cannot be larger than {APP_DOCUMENT_UPLOAD_SIZE_LIMIT}MB"
|
||||
|
||||
#: apps/web/src/app/(unauthenticated)/forgot-password/page.tsx:21
|
||||
#: apps/web/src/components/forms/signin.tsx:336
|
||||
#: apps/web/src/components/forms/signin.tsx:358
|
||||
msgid "Forgot your password?"
|
||||
msgstr "Forgot your password?"
|
||||
|
||||
#: apps/web/src/app/(recipient)/d/[token]/sign-direct-template.tsx:326
|
||||
#: apps/web/src/app/(signing)/sign/[token]/name-field.tsx:193
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:361
|
||||
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:241
|
||||
#: apps/web/src/components/forms/profile.tsx:110
|
||||
#: apps/web/src/components/forms/v2/signup.tsx:300
|
||||
msgid "Full Name"
|
||||
@ -2007,6 +2019,8 @@ msgstr "New team owner"
|
||||
msgid "New Template"
|
||||
msgstr "New Template"
|
||||
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:416
|
||||
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:295
|
||||
#: apps/web/src/components/forms/v2/signup.tsx:509
|
||||
msgid "Next"
|
||||
msgstr "Next"
|
||||
@ -2060,7 +2074,7 @@ msgstr "No value found."
|
||||
msgid "No worries, it happens! Enter your email and we'll email you a special link to reset your password."
|
||||
msgstr "No worries, it happens! Enter your email and we'll email you a special link to reset your password."
|
||||
|
||||
#: apps/web/src/components/forms/signin.tsx:142
|
||||
#: apps/web/src/components/forms/signin.tsx:160
|
||||
msgid "Not supported"
|
||||
msgstr "Not supported"
|
||||
|
||||
@ -2118,7 +2132,7 @@ msgstr "Opened"
|
||||
msgid "Or"
|
||||
msgstr "Or"
|
||||
|
||||
#: apps/web/src/components/forms/signin.tsx:356
|
||||
#: apps/web/src/components/forms/signin.tsx:378
|
||||
msgid "Or continue with"
|
||||
msgstr "Or continue with"
|
||||
|
||||
@ -2135,7 +2149,7 @@ msgstr "Owner"
|
||||
msgid "Paid"
|
||||
msgstr "Paid"
|
||||
|
||||
#: apps/web/src/components/forms/signin.tsx:401
|
||||
#: apps/web/src/components/forms/signin.tsx:423
|
||||
msgid "Passkey"
|
||||
msgstr "Passkey"
|
||||
|
||||
@ -2168,14 +2182,14 @@ msgstr "Passkeys"
|
||||
msgid "Passkeys allow you to sign in and authenticate using biometrics, password managers, etc."
|
||||
msgstr "Passkeys allow you to sign in and authenticate using biometrics, password managers, etc."
|
||||
|
||||
#: apps/web/src/components/forms/signin.tsx:143
|
||||
#: apps/web/src/components/forms/signin.tsx:161
|
||||
msgid "Passkeys are not supported on this browser"
|
||||
msgstr "Passkeys are not supported on this browser"
|
||||
|
||||
#: apps/web/src/components/(dashboard)/common/command-menu.tsx:65
|
||||
#: apps/web/src/components/forms/password.tsx:123
|
||||
#: apps/web/src/components/forms/reset-password.tsx:110
|
||||
#: apps/web/src/components/forms/signin.tsx:322
|
||||
#: apps/web/src/components/forms/signin.tsx:344
|
||||
#: apps/web/src/components/forms/signup.tsx:196
|
||||
#: apps/web/src/components/forms/v2/signup.tsx:332
|
||||
msgid "Password"
|
||||
@ -2298,7 +2312,7 @@ msgstr "Please provide a token from your authenticator, or a backup code."
|
||||
msgid "Please try again and make sure you enter the correct email address."
|
||||
msgstr "Please try again and make sure you enter the correct email address."
|
||||
|
||||
#: apps/web/src/components/forms/signin.tsx:185
|
||||
#: apps/web/src/components/forms/signin.tsx:203
|
||||
msgid "Please try again later or login using your normal details"
|
||||
msgstr "Please try again later or login using your normal details"
|
||||
|
||||
@ -2712,6 +2726,11 @@ msgstr "Sign as {0} <0>({1})</0>"
|
||||
msgid "Sign as<0>{0} <1>({1})</1></0>"
|
||||
msgstr "Sign as<0>{0} <1>({1})</1></0>"
|
||||
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:329
|
||||
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:209
|
||||
msgid "Sign document"
|
||||
msgstr "Sign document"
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/document-action-auth-dialog.tsx:59
|
||||
msgid "Sign field"
|
||||
msgstr "Sign field"
|
||||
@ -2722,8 +2741,8 @@ msgid "Sign Here"
|
||||
msgstr "Sign Here"
|
||||
|
||||
#: apps/web/src/app/not-found.tsx:29
|
||||
#: apps/web/src/components/forms/signin.tsx:349
|
||||
#: apps/web/src/components/forms/signin.tsx:476
|
||||
#: apps/web/src/components/forms/signin.tsx:371
|
||||
#: apps/web/src/components/forms/signin.tsx:498
|
||||
msgid "Sign In"
|
||||
msgstr "Sign In"
|
||||
|
||||
@ -2736,6 +2755,11 @@ msgstr "Sign in to your account"
|
||||
msgid "Sign Out"
|
||||
msgstr "Sign Out"
|
||||
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:350
|
||||
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:230
|
||||
msgid "Sign the document to complete the process."
|
||||
msgstr "Sign the document to complete the process."
|
||||
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signing-auth-page.tsx:72
|
||||
msgid "Sign up"
|
||||
msgstr "Sign up"
|
||||
@ -2758,6 +2782,8 @@ msgstr "Sign Up with OIDC"
|
||||
#: apps/web/src/app/(recipient)/d/[token]/sign-direct-template.tsx:338
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:197
|
||||
#: apps/web/src/app/(signing)/sign/[token]/signature-field.tsx:227
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:391
|
||||
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:270
|
||||
#: apps/web/src/components/forms/profile.tsx:132
|
||||
msgid "Signature"
|
||||
msgstr "Signature"
|
||||
@ -2774,8 +2800,8 @@ msgstr "Signatures will appear once the document has been completed"
|
||||
msgid "Signed"
|
||||
msgstr "Signed"
|
||||
|
||||
#: apps/web/src/components/forms/signin.tsx:349
|
||||
#: apps/web/src/components/forms/signin.tsx:476
|
||||
#: apps/web/src/components/forms/signin.tsx:371
|
||||
#: apps/web/src/components/forms/signin.tsx:498
|
||||
msgid "Signing in..."
|
||||
msgstr "Signing in..."
|
||||
|
||||
@ -2824,6 +2850,8 @@ msgstr "Site Settings"
|
||||
#: apps/web/src/app/(teams)/t/[teamUrl]/layout-billing-banner.tsx:53
|
||||
#: apps/web/src/app/(teams)/t/[teamUrl]/settings/team-email-dropdown.tsx:39
|
||||
#: apps/web/src/app/(unauthenticated)/verify-email/[token]/page.tsx:61
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:243
|
||||
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:125
|
||||
#: apps/web/src/components/(teams)/dialogs/create-team-checkout-dialog.tsx:50
|
||||
#: apps/web/src/components/(teams)/dialogs/create-team-checkout-dialog.tsx:99
|
||||
#: apps/web/src/components/(teams)/dialogs/invite-team-member-dialog.tsx:210
|
||||
@ -3117,6 +3145,10 @@ msgstr "The direct link has been copied to your clipboard"
|
||||
msgid "The document has been successfully moved to the selected team."
|
||||
msgstr "The document has been successfully moved to the selected team."
|
||||
|
||||
#: apps/web/src/app/embed/completed.tsx:29
|
||||
msgid "The document is now completed, please follow any instructions provided within the parent application."
|
||||
msgstr "The document is now completed, please follow any instructions provided within the parent application."
|
||||
|
||||
#: apps/web/src/app/(dashboard)/templates/use-template-dialog.tsx:159
|
||||
msgid "The document was created but could not be sent to recipients."
|
||||
msgstr "The document was created but could not be sent to recipients."
|
||||
@ -3292,7 +3324,7 @@ msgstr "This link is invalid or has expired. Please contact your team to resend
|
||||
msgid "This passkey has already been registered."
|
||||
msgstr "This passkey has already been registered."
|
||||
|
||||
#: apps/web/src/components/forms/signin.tsx:182
|
||||
#: apps/web/src/components/forms/signin.tsx:200
|
||||
msgid "This passkey is not configured for this application. Please login and add one in the user settings."
|
||||
msgstr "This passkey is not configured for this application. Please login and add one in the user settings."
|
||||
|
||||
@ -3300,7 +3332,7 @@ msgstr "This passkey is not configured for this application. Please login and ad
|
||||
msgid "This price includes minimum 5 seats."
|
||||
msgstr "This price includes minimum 5 seats."
|
||||
|
||||
#: apps/web/src/components/forms/signin.tsx:184
|
||||
#: apps/web/src/components/forms/signin.tsx:202
|
||||
msgid "This session has expired. Please try again."
|
||||
msgstr "This session has expired. Please try again."
|
||||
|
||||
@ -3379,6 +3411,10 @@ msgstr "To gain access to your account, please confirm your email address by cli
|
||||
msgid "To mark this document as viewed, you need to be logged in as <0>{0}</0>"
|
||||
msgstr "To mark this document as viewed, you need to be logged in as <0>{0}</0>"
|
||||
|
||||
#: apps/web/src/app/embed/authenticate.tsx:21
|
||||
msgid "To view this document you need to be signed into your account, please sign in to continue."
|
||||
msgstr "To view this document you need to be signed into your account, please sign in to continue."
|
||||
|
||||
#: apps/web/src/app/(dashboard)/settings/public-profile/public-profile-page-view.tsx:178
|
||||
msgid "Toggle the switch to hide your profile from the public."
|
||||
msgstr "Toggle the switch to hide your profile from the public."
|
||||
@ -3460,7 +3496,7 @@ msgstr "Two factor authentication"
|
||||
msgid "Two factor authentication recovery codes are used to access your account in the event that you lose access to your authenticator app."
|
||||
msgstr "Two factor authentication recovery codes are used to access your account in the event that you lose access to your authenticator app."
|
||||
|
||||
#: apps/web/src/components/forms/signin.tsx:414
|
||||
#: apps/web/src/components/forms/signin.tsx:436
|
||||
msgid "Two-Factor Authentication"
|
||||
msgstr "Two-Factor Authentication"
|
||||
|
||||
@ -3559,8 +3595,8 @@ msgstr "Unable to reset password"
|
||||
msgid "Unable to setup two-factor authentication"
|
||||
msgstr "Unable to setup two-factor authentication"
|
||||
|
||||
#: apps/web/src/components/forms/signin.tsx:229
|
||||
#: apps/web/src/components/forms/signin.tsx:237
|
||||
#: apps/web/src/components/forms/signin.tsx:247
|
||||
#: apps/web/src/components/forms/signin.tsx:255
|
||||
msgid "Unable to sign in"
|
||||
msgstr "Unable to sign in"
|
||||
|
||||
@ -3666,12 +3702,12 @@ msgid "Uploaded file not an allowed file type"
|
||||
msgstr "Uploaded file not an allowed file type"
|
||||
|
||||
#: apps/web/src/components/forms/2fa/disable-authenticator-app-dialog.tsx:187
|
||||
#: apps/web/src/components/forms/signin.tsx:471
|
||||
#: apps/web/src/components/forms/signin.tsx:493
|
||||
msgid "Use Authenticator"
|
||||
msgstr "Use Authenticator"
|
||||
|
||||
#: apps/web/src/components/forms/2fa/disable-authenticator-app-dialog.tsx:185
|
||||
#: apps/web/src/components/forms/signin.tsx:469
|
||||
#: apps/web/src/components/forms/signin.tsx:491
|
||||
msgid "Use Backup Code"
|
||||
msgstr "Use Backup Code"
|
||||
|
||||
@ -3890,9 +3926,9 @@ msgid "We encountered an unknown error while attempting to save your details. Pl
|
||||
msgstr "We encountered an unknown error while attempting to save your details. Please try again later."
|
||||
|
||||
#: apps/web/src/components/forms/profile.tsx:89
|
||||
#: apps/web/src/components/forms/signin.tsx:254
|
||||
#: apps/web/src/components/forms/signin.tsx:267
|
||||
#: apps/web/src/components/forms/signin.tsx:281
|
||||
#: apps/web/src/components/forms/signin.tsx:272
|
||||
#: apps/web/src/components/forms/signin.tsx:287
|
||||
#: apps/web/src/components/forms/signin.tsx:303
|
||||
msgid "We encountered an unknown error while attempting to sign you In. Please try again later."
|
||||
msgstr "We encountered an unknown error while attempting to sign you In. Please try again later."
|
||||
|
||||
@ -3976,6 +4012,8 @@ msgid "We were unable to setup two-factor authentication for your account. Pleas
|
||||
msgstr "We were unable to setup two-factor authentication for your account. Please ensure that you have entered your code correctly and try again."
|
||||
|
||||
#: apps/web/src/app/(recipient)/d/[token]/direct-template.tsx:119
|
||||
#: apps/web/src/app/embed/direct/[[...url]]/client.tsx:245
|
||||
#: apps/web/src/app/embed/sign/[[...url]]/client.tsx:127
|
||||
msgid "We were unable to submit this document at this time. Please try again later."
|
||||
msgstr "We were unable to submit this document at this time. Please try again later."
|
||||
|
||||
|
||||
@ -142,8 +142,9 @@ export const DocumentShareButton = ({
|
||||
<DialogTitle>Share your signing experience!</DialogTitle>
|
||||
|
||||
<DialogDescription className="mt-4">
|
||||
Don't worry, the document you signed or sent wont be shared; only your signing
|
||||
experience is. Share your signing card and showcase your signature!
|
||||
Rest assured, your document is strictly confidential and will never be shared. Only your
|
||||
signing experience will be highlighted. Share your personalized signing card to showcase
|
||||
your signature!
|
||||
</DialogDescription>
|
||||
</DialogHeader>
|
||||
|
||||
|
||||
@ -241,6 +241,7 @@ const SigningCardImage = ({ signingCelebrationImage }: SigningCardImageProps) =>
|
||||
mask: 'radial-gradient(rgba(255, 255, 255, 1) 0%, transparent 67%)',
|
||||
WebkitMask: 'radial-gradient(rgba(255, 255, 255, 1) 0%, transparent 67%)',
|
||||
}}
|
||||
priority
|
||||
/>
|
||||
</motion.div>
|
||||
);
|
||||
|
||||
@ -20,15 +20,16 @@
|
||||
"@documenso/tailwind-config": "*",
|
||||
"@documenso/tsconfig": "*",
|
||||
"@types/luxon": "^3.3.2",
|
||||
"@types/react": "18.2.18",
|
||||
"@types/react-dom": "18.2.7",
|
||||
"react": "18.2.0",
|
||||
"@types/react": "^18",
|
||||
"@types/react-dom": "^18",
|
||||
"react": "^18",
|
||||
"typescript": "5.2.2"
|
||||
},
|
||||
"dependencies": {
|
||||
"@documenso/lib": "*",
|
||||
"@hookform/resolvers": "^3.3.0",
|
||||
"@lingui/react": "^4.11.1",
|
||||
"@lingui/macro": "^4.11.3",
|
||||
"@lingui/react": "^4.11.3",
|
||||
"@radix-ui/react-accordion": "^1.1.1",
|
||||
"@radix-ui/react-alert-dialog": "^1.0.3",
|
||||
"@radix-ui/react-aspect-ratio": "^1.0.2",
|
||||
@ -63,12 +64,12 @@
|
||||
"framer-motion": "^10.12.8",
|
||||
"lucide-react": "^0.279.0",
|
||||
"luxon": "^3.4.2",
|
||||
"next": "14.0.3",
|
||||
"next": "14.2.6",
|
||||
"pdfjs-dist": "3.11.174",
|
||||
"react": "18.2.0",
|
||||
"react": "^18",
|
||||
"react-colorful": "^5.6.1",
|
||||
"react-day-picker": "^8.7.1",
|
||||
"react-dom": "18.2.0",
|
||||
"react-dom": "^18",
|
||||
"react-hook-form": "^7.45.4",
|
||||
"react-pdf": "7.7.3",
|
||||
"react-rnd": "^10.4.1",
|
||||
@ -77,4 +78,4 @@
|
||||
"ts-pattern": "^5.0.5",
|
||||
"zod": "^3.22.4"
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -112,6 +112,7 @@ export const AddTemplateFieldsFormPartial = ({
|
||||
recipients.find((recipient) => recipient.id === field.recipientId)?.email ?? '',
|
||||
signerToken:
|
||||
recipients.find((recipient) => recipient.id === field.recipientId)?.token ?? '',
|
||||
fieldMeta: field.fieldMeta ? ZFieldMetaSchema.parse(field.fieldMeta) : undefined,
|
||||
})),
|
||||
},
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user