From 22fd1b5be1778538ed5879ff5b54173cd5abb606 Mon Sep 17 00:00:00 2001 From: Catalin Pit Date: Tue, 31 Dec 2024 01:27:24 +0200 Subject: [PATCH] fix: default to user timezone (#1559) Passes the timezone of the user uploading the document/template via the UI to the server. If the user uploads a document/template via the API and doesn't set a timezone, it defaults to `Etc/UTC`. --- apps/web/src/app/(dashboard)/documents/upload-document.tsx | 5 +++++ packages/lib/server-only/document/create-document.ts | 3 +++ packages/trpc/server/document-router/router.ts | 3 ++- packages/trpc/server/document-router/schema.ts | 1 + 4 files changed, 11 insertions(+), 1 deletion(-) diff --git a/apps/web/src/app/(dashboard)/documents/upload-document.tsx b/apps/web/src/app/(dashboard)/documents/upload-document.tsx index 07c5009b5..daca2443b 100644 --- a/apps/web/src/app/(dashboard)/documents/upload-document.tsx +++ b/apps/web/src/app/(dashboard)/documents/upload-document.tsx @@ -12,6 +12,7 @@ import { useSession } from 'next-auth/react'; import { useLimits } from '@documenso/ee/server-only/limits/provider/client'; import { useAnalytics } from '@documenso/lib/client-only/hooks/use-analytics'; import { APP_DOCUMENT_UPLOAD_SIZE_LIMIT } from '@documenso/lib/constants/app'; +import { DEFAULT_DOCUMENT_TIME_ZONE, TIME_ZONES } from '@documenso/lib/constants/time-zones'; import { AppError } from '@documenso/lib/errors/app-error'; import { createDocumentData } from '@documenso/lib/server-only/document-data/create-document-data'; import { putPdfFile } from '@documenso/lib/universal/upload/put-file'; @@ -33,6 +34,9 @@ export type UploadDocumentProps = { export const UploadDocument = ({ className, team }: UploadDocumentProps) => { const router = useRouter(); const analytics = useAnalytics(); + const userTimezone = + TIME_ZONES.find((timezone) => timezone === Intl.DateTimeFormat().resolvedOptions().timeZone) ?? + DEFAULT_DOCUMENT_TIME_ZONE; const { data: session } = useSession(); @@ -73,6 +77,7 @@ export const UploadDocument = ({ className, team }: UploadDocumentProps) => { title: file.name, documentDataId, teamId: team?.id, + timezone: userTimezone, }); void refreshLimits(); diff --git a/packages/lib/server-only/document/create-document.ts b/packages/lib/server-only/document/create-document.ts index facdaa147..a0b857fbf 100644 --- a/packages/lib/server-only/document/create-document.ts +++ b/packages/lib/server-only/document/create-document.ts @@ -26,6 +26,7 @@ export type CreateDocumentOptions = { documentDataId: string; formValues?: Record; normalizePdf?: boolean; + timezone?: string; requestMetadata?: RequestMetadata; }; @@ -42,6 +43,7 @@ export const createDocument = async ({ normalizePdf, formValues, requestMetadata, + timezone, }: CreateDocumentOptions): Promise => { const user = await prisma.user.findFirstOrThrow({ where: { @@ -150,6 +152,7 @@ export const createDocument = async ({ create: { language: team?.teamGlobalSettings?.documentLanguage, typedSignatureEnabled: team?.teamGlobalSettings?.typedSignatureEnabled, + timezone: timezone, }, }, }, diff --git a/packages/trpc/server/document-router/router.ts b/packages/trpc/server/document-router/router.ts index 16da0100b..b47a66e4e 100644 --- a/packages/trpc/server/document-router/router.ts +++ b/packages/trpc/server/document-router/router.ts @@ -181,7 +181,7 @@ export const documentRouter = router({ .input(ZCreateDocumentMutationSchema) .output(ZCreateDocumentResponseSchema) .mutation(async ({ input, ctx }) => { - const { title, documentDataId, teamId } = input; + const { title, documentDataId, teamId, timezone } = input; const { remaining } = await getServerLimits({ email: ctx.user.email, teamId }); @@ -198,6 +198,7 @@ export const documentRouter = router({ title, documentDataId, normalizePdf: true, + timezone, requestMetadata: extractNextApiRequestMetadata(ctx.req), }); }), diff --git a/packages/trpc/server/document-router/schema.ts b/packages/trpc/server/document-router/schema.ts index af7845986..f51488b3c 100644 --- a/packages/trpc/server/document-router/schema.ts +++ b/packages/trpc/server/document-router/schema.ts @@ -66,6 +66,7 @@ export const ZCreateDocumentMutationSchema = z.object({ title: z.string().min(1), documentDataId: z.string().min(1), teamId: z.number().optional(), + timezone: z.string().optional(), }); export type TCreateDocumentMutationSchema = z.infer;