Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
28 changes: 12 additions & 16 deletions src/elements/fields/SignatureField/components/SignatureModal.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,15 @@ import debounce from 'lodash.debounce';
import { cloneCanvas, generateSignatureImage, trimCanvas } from './utils';
import { SignatureTranslations } from '../translation';

const SIGNER_NAME_KEY = 'feathery-signer-name';
const SIGNER_SIGNATURE_KEY = 'feathery-signer-signature';
const SIGNER_INITIALS_KEY = 'feathery-signer-initials';

export function getSignatureSessionData(isInitials: boolean) {
const imgKey = isInitials ? SIGNER_INITIALS_KEY : SIGNER_SIGNATURE_KEY;
const imgData = sessionStorage.getItem(imgKey);
return imgData || '';
}

type SignatureModalProps = SignatureCanvasProps & {
show: boolean;
setShow: (val: boolean) => void;
Expand Down Expand Up @@ -45,19 +51,7 @@ function SignatureModal(props: SignatureModalProps) {
const fullNameRef = useRef<string>(fullName);
const signatureCanvasRef = useRef<any>(null);

const storageKey = isInitials ? SIGNER_INITIALS_KEY : SIGNER_NAME_KEY;

const getSignerNameFromSessionStorage = (): string => {
const signerName = sessionStorage.getItem(storageKey);
return signerName || '';
};

useEffect(() => {
if (show) {
const storedName = getSignerNameFromSessionStorage();
setFullName(storedName);
}
}, [show]);
const imgStorageKey = isInitials ? SIGNER_INITIALS_KEY : SIGNER_SIGNATURE_KEY;

useEffect(() => {
fullNameRef.current = fullName;
Expand Down Expand Up @@ -140,7 +134,9 @@ function SignatureModal(props: SignatureModalProps) {
const handleSubmit = () => {
if (signatureFile) {
onEnd(signatureFile);
sessionStorage.setItem(storageKey, fullName);
if (signatureImgData) {
sessionStorage.setItem(imgStorageKey, signatureImgData);
}
setShow(false);
resetState();
}
Expand Down Expand Up @@ -227,7 +223,6 @@ function SignatureModal(props: SignatureModalProps) {
>
<h3>{isInitials ? t.initials_type_option : t.type_option}</h3>
<input
defaultValue={getSignerNameFromSessionStorage()}
onChange={(e) => {
const val = e.target.value.trim();
setFullName(val);
Expand Down Expand Up @@ -436,6 +431,7 @@ function SignatureModal(props: SignatureModalProps) {
<button
onClick={(e) => {
e.preventDefault();
sessionStorage.removeItem(imgStorageKey);
onClear();
}}
css={{
Expand Down
20 changes: 18 additions & 2 deletions src/elements/fields/SignatureField/index.tsx
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
import React, { Suspense, useEffect, useState } from 'react';
import SignatureCanvas from './components/SignatureCanvas';
import SignatureModal from './components/SignatureModal';
import SignatureModal, {
getSignatureSessionData
} from './components/SignatureModal';
import { dataURLToFile } from '../../../utils/image';
import { FORM_Z_INDEX } from '../../../utils/styles';
import { defaultTranslations, SignatureTranslations } from './translation';
import ErrorInput from '../../components/ErrorInput';
Expand Down Expand Up @@ -89,7 +92,20 @@ function SignatureField({
>
<div
onClick={() => {
if (!disabled) setShowSignatureModal(true);
if (disabled) return;
// If field already has value, open modal
if (defaultValue) {
setShowSignatureModal(true);
return;
}
const sessionImgData = getSignatureSessionData(isInitials);
if (sessionImgData) {
// Auto-prefill from session data
const file = dataURLToFile(sessionImgData, `${fieldKey}.png`);
onEnd(file);
} else {
setShowSignatureModal(true);
}
}}
css={{
position: 'absolute',
Expand Down
Loading