Files
sign/apps/remix/app/components/general/document-signing/document-signing-provider.tsx

73 lines
1.8 KiB
TypeScript
Raw Normal View History

import { createContext, useContext, useEffect, useState } from 'react';
2023-08-17 19:56:18 +10:00
2025-01-02 15:33:37 +11:00
export type DocumentSigningContextValue = {
2023-08-17 19:56:18 +10:00
fullName: string;
setFullName: (_value: string) => void;
email: string;
setEmail: (_value: string) => void;
signature: string | null;
setSignature: (_value: string | null) => void;
signatureValid: boolean;
setSignatureValid: (_valid: boolean) => void;
2023-08-17 19:56:18 +10:00
};
2025-01-02 15:33:37 +11:00
const DocumentSigningContext = createContext<DocumentSigningContextValue | null>(null);
2023-08-17 19:56:18 +10:00
2025-01-02 15:33:37 +11:00
export const useDocumentSigningContext = () => {
return useContext(DocumentSigningContext);
2023-08-17 19:56:18 +10:00
};
2025-01-02 15:33:37 +11:00
export const useRequiredDocumentSigningContext = () => {
const context = useDocumentSigningContext();
2023-08-17 19:56:18 +10:00
if (!context) {
throw new Error('Signing context is required');
}
return context;
};
2025-01-02 15:33:37 +11:00
export interface DocumentSigningProviderProps {
2023-09-01 18:43:53 +10:00
fullName?: string | null;
email?: string | null;
signature?: string | null;
2023-08-17 19:56:18 +10:00
children: React.ReactNode;
}
2025-01-02 15:33:37 +11:00
export const DocumentSigningProvider = ({
2023-08-17 19:56:18 +10:00
fullName: initialFullName,
email: initialEmail,
signature: initialSignature,
children,
2025-01-02 15:33:37 +11:00
}: DocumentSigningProviderProps) => {
2023-08-17 19:56:18 +10:00
const [fullName, setFullName] = useState(initialFullName || '');
const [email, setEmail] = useState(initialEmail || '');
const [signature, setSignature] = useState(initialSignature || null);
const [signatureValid, setSignatureValid] = useState(true);
2023-08-17 19:56:18 +10:00
useEffect(() => {
if (initialSignature) {
setSignature(initialSignature);
}
}, [initialSignature]);
2023-08-17 19:56:18 +10:00
return (
2025-01-02 15:33:37 +11:00
<DocumentSigningContext.Provider
2023-08-17 19:56:18 +10:00
value={{
fullName,
setFullName,
email,
setEmail,
signature,
setSignature,
signatureValid,
setSignatureValid,
2023-08-17 19:56:18 +10:00
}}
>
{children}
2025-01-02 15:33:37 +11:00
</DocumentSigningContext.Provider>
2023-08-17 19:56:18 +10:00
);
};
2025-01-02 15:33:37 +11:00
DocumentSigningProvider.displayName = 'DocumentSigningProvider';