mirror of
https://github.com/documenso/documenso.git
synced 2026-07-26 01:45:08 +10:00
138d663c25
Merge origin/main into feat/external-2fa-codes. Resolve formatting conflicts caused by biome rollout; preserve both feature streams: PR's external 2FA token + signing-session 2FA proof additions plus main's RateLimit/RecipientExpired/signingReminders/date-auto-insert. In complete-document-with-token.ts, drop the duplicate early field-fetching block introduced when main moved that logic later with date auto-insert support; keep the EXTERNAL_TWO_FACTOR_AUTH check using derivedRecipientActionAuth.
86 lines
2.1 KiB
TypeScript
86 lines
2.1 KiB
TypeScript
import { isBase64Image } from '@documenso/lib/constants/signatures';
|
|
import { createContext, useContext, useState } from 'react';
|
|
|
|
export type DocumentSigningContextValue = {
|
|
fullName: string;
|
|
setFullName: (_value: string) => void;
|
|
email: string;
|
|
setEmail: (_value: string) => void;
|
|
signature: string | null;
|
|
setSignature: (_value: string | null) => void;
|
|
};
|
|
|
|
const DocumentSigningContext = createContext<DocumentSigningContextValue | null>(null);
|
|
|
|
export const useDocumentSigningContext = () => {
|
|
return useContext(DocumentSigningContext);
|
|
};
|
|
|
|
export const useRequiredDocumentSigningContext = () => {
|
|
const context = useDocumentSigningContext();
|
|
|
|
if (!context) {
|
|
throw new Error('Signing context is required');
|
|
}
|
|
|
|
return context;
|
|
};
|
|
|
|
export interface DocumentSigningProviderProps {
|
|
fullName?: string | null;
|
|
email?: string | null;
|
|
signature?: string | null;
|
|
typedSignatureEnabled?: boolean;
|
|
uploadSignatureEnabled?: boolean;
|
|
drawSignatureEnabled?: boolean;
|
|
children: React.ReactNode;
|
|
}
|
|
|
|
export const DocumentSigningProvider = ({
|
|
fullName: initialFullName,
|
|
email: initialEmail,
|
|
signature: initialSignature,
|
|
typedSignatureEnabled = true,
|
|
uploadSignatureEnabled = true,
|
|
drawSignatureEnabled = true,
|
|
children,
|
|
}: DocumentSigningProviderProps) => {
|
|
const [fullName, setFullName] = useState(initialFullName || '');
|
|
const [email, setEmail] = useState(initialEmail || '');
|
|
|
|
// Ensure the user signature doesn't show up if it's not allowed.
|
|
const [signature, setSignature] = useState(
|
|
(() => {
|
|
const sig = initialSignature || '';
|
|
const isBase64 = isBase64Image(sig);
|
|
|
|
if (isBase64 && (uploadSignatureEnabled || drawSignatureEnabled)) {
|
|
return sig;
|
|
}
|
|
|
|
if (!isBase64 && typedSignatureEnabled) {
|
|
return sig;
|
|
}
|
|
|
|
return null;
|
|
})(),
|
|
);
|
|
|
|
return (
|
|
<DocumentSigningContext.Provider
|
|
value={{
|
|
fullName,
|
|
setFullName,
|
|
email,
|
|
setEmail,
|
|
signature,
|
|
setSignature,
|
|
}}
|
|
>
|
|
{children}
|
|
</DocumentSigningContext.Provider>
|
|
);
|
|
};
|
|
|
|
DocumentSigningProvider.displayName = 'DocumentSigningProvider';
|