diff --git a/apps/web/src/app/(dashboard)/documents/[id]/document-page-view.tsx b/apps/web/src/app/(dashboard)/documents/[id]/document-page-view.tsx
index e12a745a2..0eb8829a1 100644
--- a/apps/web/src/app/(dashboard)/documents/[id]/document-page-view.tsx
+++ b/apps/web/src/app/(dashboard)/documents/[id]/document-page-view.tsx
@@ -85,6 +85,7 @@ export const DocumentPageView = async ({ params, team }: DocumentPageViewProps)
const recipients = await getRecipientsForDocument({
documentId,
+ teamId: team?.id,
userId: user.id,
});
diff --git a/apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx b/apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx
index fe278486e..5d9fe78aa 100644
--- a/apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx
+++ b/apps/web/src/app/(dashboard)/documents/[id]/edit-document.tsx
@@ -30,6 +30,8 @@ import { LazyPDFViewer } from '@documenso/ui/primitives/lazy-pdf-viewer';
import { Stepper } from '@documenso/ui/primitives/stepper';
import { useToast } from '@documenso/ui/primitives/use-toast';
+import { useOptionalCurrentTeam } from '~/providers/team';
+
export type EditDocumentFormProps = {
className?: string;
user: User;
@@ -58,6 +60,7 @@ export const EditDocumentForm = ({
const router = useRouter();
const searchParams = useSearchParams();
+ const team = useOptionalCurrentTeam();
const { mutateAsync: addTitle } = trpc.document.setTitleForDocument.useMutation();
const { mutateAsync: addFields } = trpc.field.addFields.useMutation();
@@ -112,6 +115,7 @@ export const EditDocumentForm = ({
// Custom invocation server action
await addTitle({
documentId: document.id,
+ teamId: team?.id,
title: data.title,
});
@@ -134,6 +138,7 @@ export const EditDocumentForm = ({
// Custom invocation server action
await addSigners({
documentId: document.id,
+ teamId: team?.id,
signers: data.signers,
});
@@ -177,6 +182,7 @@ export const EditDocumentForm = ({
try {
await sendDocument({
documentId: document.id,
+ teamId: team?.id,
meta: {
subject,
message,
diff --git a/apps/web/src/app/(dashboard)/documents/[id]/edit/document-edit-page-view.tsx b/apps/web/src/app/(dashboard)/documents/[id]/edit/document-edit-page-view.tsx
index 87b3738bb..69122312e 100644
--- a/apps/web/src/app/(dashboard)/documents/[id]/edit/document-edit-page-view.tsx
+++ b/apps/web/src/app/(dashboard)/documents/[id]/edit/document-edit-page-view.tsx
@@ -74,6 +74,7 @@ export const DocumentEditPageView = async ({ params, team }: DocumentEditPageVie
getRecipientsForDocument({
documentId,
userId: user.id,
+ teamId: team?.id,
}),
getFieldsForDocument({
documentId,
diff --git a/apps/web/src/app/(dashboard)/documents/[id]/logs/document-logs-page-view.tsx b/apps/web/src/app/(dashboard)/documents/[id]/logs/document-logs-page-view.tsx
index e9627d2c7..019ced57e 100644
--- a/apps/web/src/app/(dashboard)/documents/[id]/logs/document-logs-page-view.tsx
+++ b/apps/web/src/app/(dashboard)/documents/[id]/logs/document-logs-page-view.tsx
@@ -44,6 +44,7 @@ export const DocumentLogsPageView = async ({ params, team }: DocumentLogsPageVie
getRecipientsForDocument({
documentId,
userId: user.id,
+ teamId: team?.id,
}),
]);
diff --git a/apps/web/src/app/(teams)/t/[teamUrl]/layout.tsx b/apps/web/src/app/(teams)/t/[teamUrl]/layout.tsx
index 2883abc21..e0cd23acb 100644
--- a/apps/web/src/app/(teams)/t/[teamUrl]/layout.tsx
+++ b/apps/web/src/app/(teams)/t/[teamUrl]/layout.tsx
@@ -11,6 +11,7 @@ import { SubscriptionStatus } from '@documenso/prisma/client';
import { Header } from '~/components/(dashboard)/layout/header';
import { RefreshOnFocus } from '~/components/(dashboard)/refresh-on-focus/refresh-on-focus';
import { NextAuthProvider } from '~/providers/next-auth';
+import { TeamProvider } from '~/providers/team';
import { LayoutBillingBanner } from './layout-billing-banner';
@@ -56,7 +57,9 @@ export default async function AuthenticatedTeamsLayout({
- {children}
+
+ {children}
+
diff --git a/apps/web/src/providers/team.tsx b/apps/web/src/providers/team.tsx
new file mode 100644
index 000000000..c09ce18b2
--- /dev/null
+++ b/apps/web/src/providers/team.tsx
@@ -0,0 +1,31 @@
+'use client';
+
+import { createContext, useContext } from 'react';
+import React from 'react';
+
+import type { Team } from '@documenso/prisma/client';
+
+interface TeamProviderProps {
+ children: React.ReactNode;
+ team: Team;
+}
+
+const TeamContext = createContext(null);
+
+export const useCurrentTeam = (): Team | null => {
+ const context = useContext(TeamContext);
+
+ if (!context) {
+ throw new Error('useCurrentTeam must be used within a TeamProvider');
+ }
+
+ return context;
+};
+
+export const useOptionalCurrentTeam = (): Team | null => {
+ return useContext(TeamContext);
+};
+
+export const TeamProvider = ({ children, team }: TeamProviderProps) => {
+ return {children};
+};
diff --git a/packages/trpc/server/document-router/router.ts b/packages/trpc/server/document-router/router.ts
index cac41e181..26b547ac9 100644
--- a/packages/trpc/server/document-router/router.ts
+++ b/packages/trpc/server/document-router/router.ts
@@ -13,8 +13,6 @@ import { resendDocument } from '@documenso/lib/server-only/document/resend-docum
import { searchDocumentsWithKeyword } from '@documenso/lib/server-only/document/search-documents-with-keyword';
import { sendDocument } from '@documenso/lib/server-only/document/send-document';
import { updateTitle } from '@documenso/lib/server-only/document/update-title';
-import { setFieldsForDocument } from '@documenso/lib/server-only/field/set-fields-for-document';
-import { setRecipientsForDocument } from '@documenso/lib/server-only/recipient/set-recipients-for-document';
import { symmetricEncrypt } from '@documenso/lib/universal/crypto';
import { extractNextApiRequestMetadata } from '@documenso/lib/universal/extract-request-metadata';
@@ -28,9 +26,7 @@ import {
ZResendDocumentMutationSchema,
ZSearchDocumentsMutationSchema,
ZSendDocumentMutationSchema,
- ZSetFieldsForDocumentMutationSchema,
ZSetPasswordForDocumentMutationSchema,
- ZSetRecipientsForDocumentMutationSchema,
ZSetTitleForDocumentMutationSchema,
} from './schema';
@@ -157,63 +153,19 @@ export const documentRouter = router({
setTitleForDocument: authenticatedProcedure
.input(ZSetTitleForDocumentMutationSchema)
.mutation(async ({ input, ctx }) => {
- const { documentId, title } = input;
+ const { documentId, teamId, title } = input;
const userId = ctx.user.id;
return await updateTitle({
title,
userId,
+ teamId,
documentId,
requestMetadata: extractNextApiRequestMetadata(ctx.req),
});
}),
- setRecipientsForDocument: authenticatedProcedure
- .input(ZSetRecipientsForDocumentMutationSchema)
- .mutation(async ({ input, ctx }) => {
- try {
- const { documentId, recipients } = input;
-
- return await setRecipientsForDocument({
- userId: ctx.user.id,
- documentId,
- recipients,
- requestMetadata: extractNextApiRequestMetadata(ctx.req),
- });
- } catch (err) {
- console.error(err);
-
- throw new TRPCError({
- code: 'BAD_REQUEST',
- message:
- 'We were unable to set the recipients for this document. Please try again later.',
- });
- }
- }),
-
- setFieldsForDocument: authenticatedProcedure
- .input(ZSetFieldsForDocumentMutationSchema)
- .mutation(async ({ input, ctx }) => {
- try {
- const { documentId, fields } = input;
-
- return await setFieldsForDocument({
- userId: ctx.user.id,
- documentId,
- fields,
- requestMetadata: extractNextApiRequestMetadata(ctx.req),
- });
- } catch (err) {
- console.error(err);
-
- throw new TRPCError({
- code: 'BAD_REQUEST',
- message: 'We were unable to set the fields for this document. Please try again later.',
- });
- }
- }),
-
setPasswordForDocument: authenticatedProcedure
.input(ZSetPasswordForDocumentMutationSchema)
.mutation(async ({ input, ctx }) => {
@@ -251,7 +203,7 @@ export const documentRouter = router({
.input(ZSendDocumentMutationSchema)
.mutation(async ({ input, ctx }) => {
try {
- const { documentId, meta } = input;
+ const { documentId, teamId, meta } = input;
if (meta.message || meta.subject || meta.timezone || meta.dateFormat || meta.redirectUrl) {
await upsertDocumentMeta({
@@ -269,6 +221,7 @@ export const documentRouter = router({
return await sendDocument({
userId: ctx.user.id,
documentId,
+ teamId,
requestMetadata: extractNextApiRequestMetadata(ctx.req),
});
} catch (err) {
diff --git a/packages/trpc/server/document-router/schema.ts b/packages/trpc/server/document-router/schema.ts
index f32b4b6a7..34ddf1a5c 100644
--- a/packages/trpc/server/document-router/schema.ts
+++ b/packages/trpc/server/document-router/schema.ts
@@ -39,6 +39,7 @@ export type TCreateDocumentMutationSchema = z.infer {
try {
- const { documentId, signers } = input;
+ const { documentId, teamId, signers } = input;
return await setRecipientsForDocument({
userId: ctx.user.id,
documentId,
+ teamId,
recipients: signers.map((signer) => ({
id: signer.nativeId,
email: signer.email,
diff --git a/packages/trpc/server/recipient-router/schema.ts b/packages/trpc/server/recipient-router/schema.ts
index edcd34ed6..6825137c4 100644
--- a/packages/trpc/server/recipient-router/schema.ts
+++ b/packages/trpc/server/recipient-router/schema.ts
@@ -5,6 +5,7 @@ import { RecipientRole } from '@documenso/prisma/client';
export const ZAddSignersMutationSchema = z
.object({
documentId: z.number(),
+ teamId: z.number().optional(),
signers: z.array(
z.object({
nativeId: z.number().optional(),