import { DOCUMENT_VISIBILITY } from '@documenso/lib/constants/document-visibility'; import { type TDocumentEmailSettings, ZDocumentEmailSettingsSchema } from '@documenso/lib/types/document-email'; import type { MessageDescriptor } from '@lingui/core'; import { msg } from '@lingui/core/macro'; import { useLingui } from '@lingui/react'; import { Trans } from '@lingui/react/macro'; import type { OrganisationGlobalSettings, TeamGlobalSettings } from '@prisma/client'; import type { ReactNode } from 'react'; import { DetailsCard, DetailsValue } from '~/components/general/admin-details'; const EMAIL_SETTINGS_LABELS: Record = { recipientSigningRequest: msg`Recipient signing request`, recipientRemoved: msg`Recipient removed`, recipientSigned: msg`Recipient signed`, documentPending: msg`Document pending`, documentCompleted: msg`Document completed`, documentDeleted: msg`Document deleted`, ownerDocumentCompleted: msg`Owner document completed`, ownerRecipientExpired: msg`Owner recipient expired`, ownerDocumentCreated: msg`Owner document created`, }; const emailSettingsKeys = Object.keys(EMAIL_SETTINGS_LABELS) as (keyof TDocumentEmailSettings)[]; type AdminGlobalSettingsSectionProps = { settings: TeamGlobalSettings | OrganisationGlobalSettings | null; isTeam?: boolean; /** When viewing a team, the parent organisation settings the team inherits from. */ inheritedSettings?: OrganisationGlobalSettings | null; }; export const AdminGlobalSettingsSection = ({ settings, isTeam = false, inheritedSettings, }: AdminGlobalSettingsSectionProps) => { const { _ } = useLingui(); if (!settings) { return null; } const notSet = Not set; const inheritedValue = (value: ReactNode) => { if (!isTeam || value === null) { return notSet; } return ( Inherited: {value} ); }; const textValue = (value: string | null | undefined, inherited?: string | null) => { if (value && value.trim() !== '') { return value; } if (inherited && inherited.trim() !== '') { return inheritedValue(inherited); } return notSet; }; const booleanLabel = (value: boolean) => (value ? Enabled : Disabled); const booleanValue = (value: boolean | null | undefined, inherited?: boolean | null) => { if (value !== null && value !== undefined) { return booleanLabel(value); } return inherited !== null && inherited !== undefined ? inheritedValue(booleanLabel(inherited)) : notSet; }; const visibilityLabel = (value: string | null | undefined) => { return value && DOCUMENT_VISIBILITY[value] ? _(DOCUMENT_VISIBILITY[value].value) : null; }; const visibilityValue = (value: string | null | undefined, inherited?: string | null) => { const label = visibilityLabel(value); if (label !== null) { return label; } return inheritedValue(visibilityLabel(inherited)); }; const parsedEmailSettings = ZDocumentEmailSettingsSchema.safeParse(settings.emailDocumentSettings); return (
Document visibility}> {visibilityValue(settings.documentVisibility, inheritedSettings?.documentVisibility)} Document language}> {textValue(settings.documentLanguage, inheritedSettings?.documentLanguage)} Document timezone}> {textValue(settings.documentTimezone, inheritedSettings?.documentTimezone)} Date format}> {textValue(settings.documentDateFormat, inheritedSettings?.documentDateFormat)} Include sender details}> {booleanValue(settings.includeSenderDetails, inheritedSettings?.includeSenderDetails)} Include signing certificate}> {booleanValue(settings.includeSigningCertificate, inheritedSettings?.includeSigningCertificate)} Include audit log}> {booleanValue(settings.includeAuditLog, inheritedSettings?.includeAuditLog)} Delegate document ownership}> {booleanValue(settings.delegateDocumentOwnership, inheritedSettings?.delegateDocumentOwnership)} Typed signature}> {booleanValue(settings.typedSignatureEnabled, inheritedSettings?.typedSignatureEnabled)} Upload signature}> {booleanValue(settings.uploadSignatureEnabled, inheritedSettings?.uploadSignatureEnabled)} Draw signature}> {booleanValue(settings.drawSignatureEnabled, inheritedSettings?.drawSignatureEnabled)} Branding}> {booleanValue(settings.brandingEnabled, inheritedSettings?.brandingEnabled)} Branding logo}> {textValue(settings.brandingLogo, inheritedSettings?.brandingLogo)} Branding URL}> {textValue(settings.brandingUrl, inheritedSettings?.brandingUrl)} Branding company details}> {textValue(settings.brandingCompanyDetails, inheritedSettings?.brandingCompanyDetails)} Email reply-to}> {textValue(settings.emailReplyTo, inheritedSettings?.emailReplyTo)} {isTeam && parsedEmailSettings.success && ( Email document settings}>
{emailSettingsKeys.map((key) => (
{_(EMAIL_SETTINGS_LABELS[key])} {parsedEmailSettings.data[key] ? On : Off}
))}
)} AI features}> {booleanValue(settings.aiFeaturesEnabled, inheritedSettings?.aiFeaturesEnabled)}
); };