From 311adb4d1e0cc49c8729df21695ee602acaa187c Mon Sep 17 00:00:00 2001 From: Ephraim Atta-Duncan Date: Wed, 30 Apr 2025 23:48:48 +0000 Subject: [PATCH] chore: refactor --- .../document-signing-checkbox-field.tsx | 1 - .../document-signing-dropdown-field.tsx | 2 - .../document-signing-field-container.tsx | 2 - .../document-signing-form.tsx | 3 -- .../document-signing-name-field.tsx | 1 - .../document-signing-number-field.tsx | 2 - .../document-signing-radio-field.tsx | 1 - .../document-signing-signature-field.tsx | 1 - .../document-signing-text-field.tsx | 2 - .../general/template/template-edit-form.tsx | 2 +- .../server-only/template/update-template.ts | 9 +++- .../template-flow/add-template-settings.tsx | 48 +++++++++++-------- 12 files changed, 35 insertions(+), 39 deletions(-) diff --git a/apps/remix/app/components/general/document-signing/document-signing-checkbox-field.tsx b/apps/remix/app/components/general/document-signing/document-signing-checkbox-field.tsx index b80257d8a..84e2bef31 100644 --- a/apps/remix/app/components/general/document-signing/document-signing-checkbox-field.tsx +++ b/apps/remix/app/components/general/document-signing/document-signing-checkbox-field.tsx @@ -241,7 +241,6 @@ export const DocumentSigningCheckboxField = ({ void executeActionAuthProcedure({ onReauthFormSubmit: async (authOptions) => await onSign(authOptions), actionTarget: field.type, - isEnterprise, }); } }, [checkedValues, isLengthConditionMet, field.inserted]); diff --git a/apps/remix/app/components/general/document-signing/document-signing-dropdown-field.tsx b/apps/remix/app/components/general/document-signing/document-signing-dropdown-field.tsx index 341f21fb8..edfc528c6 100644 --- a/apps/remix/app/components/general/document-signing/document-signing-dropdown-field.tsx +++ b/apps/remix/app/components/general/document-signing/document-signing-dropdown-field.tsx @@ -148,7 +148,6 @@ export const DocumentSigningDropdownField = ({ void executeActionAuthProcedure({ onReauthFormSubmit: async (authOptions) => await onSign(authOptions), actionTarget: field.type, - isEnterprise, }); } }, [localChoice]); @@ -158,7 +157,6 @@ export const DocumentSigningDropdownField = ({ void executeActionAuthProcedure({ onReauthFormSubmit: async (authOptions) => await onSign(authOptions), actionTarget: field.type, - isEnterprise, }); } }, []); diff --git a/apps/remix/app/components/general/document-signing/document-signing-field-container.tsx b/apps/remix/app/components/general/document-signing/document-signing-field-container.tsx index 94730fb41..59c84393a 100644 --- a/apps/remix/app/components/general/document-signing/document-signing-field-container.tsx +++ b/apps/remix/app/components/general/document-signing/document-signing-field-container.tsx @@ -91,7 +91,6 @@ export const DocumentSigningFieldContainer = ({ // Do nothing since the user should be redirected. }, actionTarget: field.type, - isEnterprise, }); return; @@ -109,7 +108,6 @@ export const DocumentSigningFieldContainer = ({ await executeActionAuthProcedure({ onReauthFormSubmit: onSign, actionTarget: field.type, - isEnterprise, }); }; diff --git a/apps/remix/app/components/general/document-signing/document-signing-form.tsx b/apps/remix/app/components/general/document-signing/document-signing-form.tsx index 4e8eb6a0a..1c20725da 100644 --- a/apps/remix/app/components/general/document-signing/document-signing-form.tsx +++ b/apps/remix/app/components/general/document-signing/document-signing-form.tsx @@ -120,7 +120,6 @@ export const DocumentSigningForm = ({ try { await executeActionAuthProcedure({ actionTarget: 'DOCUMENT', - isEnterprise, onReauthFormSubmit: async (authOptions) => { await completeDocument(authOptions, nextSigner); }, @@ -241,7 +240,6 @@ export const DocumentSigningForm = ({ onSignatureComplete={async (nextSigner) => { await executeActionAuthProcedure({ actionTarget: 'DOCUMENT', - isEnterprise, onReauthFormSubmit: async (authOptions) => { await completeDocument(authOptions, nextSigner); }, @@ -427,7 +425,6 @@ export const DocumentSigningForm = ({ onSignatureComplete={async (nextSigner) => { await executeActionAuthProcedure({ actionTarget: 'DOCUMENT', - isEnterprise, onReauthFormSubmit: async (authOptions) => { await completeDocument(authOptions, nextSigner); }, diff --git a/apps/remix/app/components/general/document-signing/document-signing-name-field.tsx b/apps/remix/app/components/general/document-signing/document-signing-name-field.tsx index 00a67da44..42ac1e220 100644 --- a/apps/remix/app/components/general/document-signing/document-signing-name-field.tsx +++ b/apps/remix/app/components/general/document-signing/document-signing-name-field.tsx @@ -85,7 +85,6 @@ export const DocumentSigningNameField = ({ void executeActionAuthProcedure({ onReauthFormSubmit: async (authOptions) => await onSign(authOptions, localFullName), actionTarget: field.type, - isEnterprise, }); }; diff --git a/apps/remix/app/components/general/document-signing/document-signing-number-field.tsx b/apps/remix/app/components/general/document-signing/document-signing-number-field.tsx index 6bc67e78d..19932fbdc 100644 --- a/apps/remix/app/components/general/document-signing/document-signing-number-field.tsx +++ b/apps/remix/app/components/general/document-signing/document-signing-number-field.tsx @@ -112,7 +112,6 @@ export const DocumentSigningNumberField = ({ void executeActionAuthProcedure({ onReauthFormSubmit: async (authOptions) => await onSign(authOptions), actionTarget: field.type, - isEnterprise, }); }; @@ -223,7 +222,6 @@ export const DocumentSigningNumberField = ({ void executeActionAuthProcedure({ onReauthFormSubmit: async (authOptions) => await onSign(authOptions), actionTarget: field.type, - isEnterprise, }); } }, []); diff --git a/apps/remix/app/components/general/document-signing/document-signing-radio-field.tsx b/apps/remix/app/components/general/document-signing/document-signing-radio-field.tsx index 75c26ae0d..6e19af13e 100644 --- a/apps/remix/app/components/general/document-signing/document-signing-radio-field.tsx +++ b/apps/remix/app/components/general/document-signing/document-signing-radio-field.tsx @@ -144,7 +144,6 @@ export const DocumentSigningRadioField = ({ void executeActionAuthProcedure({ onReauthFormSubmit: async (authOptions) => await onSign(authOptions), actionTarget: field.type, - isEnterprise, }); } }, [selectedOption, field]); diff --git a/apps/remix/app/components/general/document-signing/document-signing-signature-field.tsx b/apps/remix/app/components/general/document-signing/document-signing-signature-field.tsx index 90c09074e..7eba0dcee 100644 --- a/apps/remix/app/components/general/document-signing/document-signing-signature-field.tsx +++ b/apps/remix/app/components/general/document-signing/document-signing-signature-field.tsx @@ -110,7 +110,6 @@ export const DocumentSigningSignatureField = ({ void executeActionAuthProcedure({ onReauthFormSubmit: async (authOptions) => await onSign(authOptions, localSignature), actionTarget: field.type, - isEnterprise, }); }; diff --git a/apps/remix/app/components/general/document-signing/document-signing-text-field.tsx b/apps/remix/app/components/general/document-signing/document-signing-text-field.tsx index 38228434b..a7eea896b 100644 --- a/apps/remix/app/components/general/document-signing/document-signing-text-field.tsx +++ b/apps/remix/app/components/general/document-signing/document-signing-text-field.tsx @@ -124,7 +124,6 @@ export const DocumentSigningTextField = ({ void executeActionAuthProcedure({ onReauthFormSubmit: async (authOptions) => await onSign(authOptions), actionTarget: field.type, - isEnterprise, }); }; @@ -218,7 +217,6 @@ export const DocumentSigningTextField = ({ void executeActionAuthProcedure({ onReauthFormSubmit: async (authOptions) => await onSign(authOptions), actionTarget: field.type, - isEnterprise, }); } }, []); diff --git a/apps/remix/app/components/general/template/template-edit-form.tsx b/apps/remix/app/components/general/template/template-edit-form.tsx index e7dcc86d8..dc6e84839 100644 --- a/apps/remix/app/components/general/template/template-edit-form.tsx +++ b/apps/remix/app/components/general/template/template-edit-form.tsx @@ -152,7 +152,7 @@ export const TemplateEditForm = ({ toast({ title: _(msg`Error`), - description: _(msg`An error occurred while updating the document settings.`), + description: _(msg`An error occurred while updating the template settings.`), variant: 'destructive', }); } diff --git a/packages/lib/server-only/template/update-template.ts b/packages/lib/server-only/template/update-template.ts index 6bf41f7b2..61db6dc32 100644 --- a/packages/lib/server-only/template/update-template.ts +++ b/packages/lib/server-only/template/update-template.ts @@ -5,6 +5,7 @@ import { prisma } from '@documenso/prisma'; import { AppError, AppErrorCode } from '../../errors/app-error'; import type { TDocumentAccessAuthTypes, TDocumentActionAuthTypes } from '../../types/document-auth'; +import { DocumentAuth } from '../../types/document-auth'; import { createDocumentAuthOptions, extractDocumentAuthMethods } from '../../utils/document-auth'; export type UpdateTemplateOptions = { @@ -73,7 +74,11 @@ export const updateTemplate = async ({ data?.globalActionAuth === undefined ? documentGlobalActionAuth : data.globalActionAuth; // Check if user has permission to set the global action auth. - if (newGlobalActionAuth) { + // Only ACCOUNT and PASSKEY require enterprise permissions + if ( + newGlobalActionAuth && + (newGlobalActionAuth === DocumentAuth.ACCOUNT || newGlobalActionAuth === DocumentAuth.PASSKEY) + ) { const isDocumentEnterprise = await isUserEnterprise({ userId, teamId, @@ -81,7 +86,7 @@ export const updateTemplate = async ({ if (!isDocumentEnterprise) { throw new AppError(AppErrorCode.UNAUTHORIZED, { - message: 'You do not have permission to set the action auth', + message: 'You do not have permission to set this action auth type', }); } } diff --git a/packages/ui/primitives/template-flow/add-template-settings.tsx b/packages/ui/primitives/template-flow/add-template-settings.tsx index 57f1313cb..06bc1fd08 100644 --- a/packages/ui/primitives/template-flow/add-template-settings.tsx +++ b/packages/ui/primitives/template-flow/add-template-settings.tsx @@ -1,10 +1,14 @@ import { useEffect } from 'react'; import { zodResolver } from '@hookform/resolvers/zod'; -import { useLingui } from '@lingui/react/macro'; -import { Trans } from '@lingui/react/macro'; -import { DocumentVisibility, TeamMemberRole } from '@prisma/client'; -import { DocumentDistributionMethod, type Field, type Recipient } from '@prisma/client'; +import { Trans, useLingui } from '@lingui/react/macro'; +import { + DocumentDistributionMethod, + DocumentVisibility, + type Field, + type Recipient, + TeamMemberRole, +} from '@prisma/client'; import { InfoIcon } from 'lucide-react'; import { useForm } from 'react-hook-form'; import { match } from 'ts-pattern'; @@ -360,24 +364,26 @@ export const AddTemplateSettingsFormPartial = ({ )} /> - {isEnterprise && ( - ( - - - Recipient action authentication - - + ( + + + Recipient action authentication + + - - - - - )} - /> - )} + + + + + )} + /> {distributionMethod === DocumentDistributionMethod.EMAIL && (