mirror of
https://github.com/documenso/documenso.git
synced 2025-11-16 01:32:06 +10:00
fix: insert name on mount using recipient name
This commit is contained in:
@ -25,9 +25,41 @@ export default function PDFSigner(props: any) {
|
|||||||
const signatureFields = fields.filter((field) => [FieldType.SIGNATURE].includes(field.type));
|
const signatureFields = fields.filter((field) => [FieldType.SIGNATURE].includes(field.type));
|
||||||
const [dialogField, setDialogField] = useState<any>();
|
const [dialogField, setDialogField] = useState<any>();
|
||||||
|
|
||||||
useEffect(() => {
|
function signField(options: {
|
||||||
setSigningDone(checkIfSigningIsDone());
|
fieldId: string;
|
||||||
}, [fields]);
|
type: string;
|
||||||
|
typedSignature?: string;
|
||||||
|
signatureImage?: string;
|
||||||
|
}) {
|
||||||
|
const { fieldId, type, typedSignature, signatureImage } = options;
|
||||||
|
|
||||||
|
const signature = {
|
||||||
|
fieldId,
|
||||||
|
type,
|
||||||
|
typedSignature,
|
||||||
|
signatureImage,
|
||||||
|
};
|
||||||
|
|
||||||
|
const field = fields.find((e) => e.id == fieldId);
|
||||||
|
|
||||||
|
if (!field) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
setLocalSignatures((s) => [...s.filter((e) => e.fieldId !== fieldId), signature]);
|
||||||
|
|
||||||
|
setFields((prevState) => {
|
||||||
|
const newState = [...prevState];
|
||||||
|
const index = newState.findIndex((e) => e.id == fieldId);
|
||||||
|
|
||||||
|
newState[index] = {
|
||||||
|
...newState[index],
|
||||||
|
signature,
|
||||||
|
};
|
||||||
|
|
||||||
|
return newState;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function onClick(item: any) {
|
function onClick(item: any) {
|
||||||
if (item.type === FieldType.SIGNATURE) {
|
if (item.type === FieldType.SIGNATURE) {
|
||||||
@ -50,29 +82,88 @@ export default function PDFSigner(props: any) {
|
|||||||
|
|
||||||
if (!dialogResult) return;
|
if (!dialogResult) return;
|
||||||
|
|
||||||
const signature = {
|
signField({
|
||||||
fieldId: dialogField.id,
|
fieldId: dialogField.id,
|
||||||
type: dialogResult.type,
|
type: dialogResult.type,
|
||||||
typedSignature: dialogResult.typedSignature,
|
typedSignature: dialogResult.typedSignature,
|
||||||
signatureImage: dialogResult.signatureImage,
|
signatureImage: dialogResult.signatureImage,
|
||||||
};
|
});
|
||||||
|
|
||||||
setLocalSignatures(localSignatures.concat(signature));
|
|
||||||
|
|
||||||
fields.splice(
|
|
||||||
fields.findIndex(function (i) {
|
|
||||||
return i.id === signature.fieldId;
|
|
||||||
}),
|
|
||||||
1
|
|
||||||
);
|
|
||||||
const signedField = { ...dialogField };
|
|
||||||
signedField.signature = signature;
|
|
||||||
setFields((prevState) => [...prevState, signedField]);
|
|
||||||
setSignatureDialogOpen(false);
|
setSignatureDialogOpen(false);
|
||||||
setNameDialogOpen(false);
|
setNameDialogOpen(false);
|
||||||
setDialogField(null);
|
setDialogField(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function checkIfSigningIsDone(): boolean {
|
||||||
|
// Check if all fields are signed..
|
||||||
|
if (signatureFields.length > 0) {
|
||||||
|
// If there are no fields to sign at least one signature is enough
|
||||||
|
return fields
|
||||||
|
.filter((field) => field.type === FieldType.SIGNATURE)
|
||||||
|
.every((field) => field.signature);
|
||||||
|
} else {
|
||||||
|
return localSignatures.length > 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function addFreeSignature(e: any, page: number, recipient: any): any {
|
||||||
|
const freeSignatureField = createField(e, page, recipient, FieldType.FREE_SIGNATURE);
|
||||||
|
|
||||||
|
createOrUpdateField(props.document, freeSignatureField, recipient.token).then((res) => {
|
||||||
|
setFields((prevState) => [...prevState, res]);
|
||||||
|
setDialogField(res);
|
||||||
|
setSignatureDialogOpen(true);
|
||||||
|
});
|
||||||
|
|
||||||
|
return freeSignatureField;
|
||||||
|
}
|
||||||
|
|
||||||
|
function onDeleteHandler(id: any) {
|
||||||
|
const field = fields.find((e) => e.id == id);
|
||||||
|
const fieldIndex = fields.map((item) => item.id).indexOf(id);
|
||||||
|
if (fieldIndex > -1) {
|
||||||
|
const fieldWithoutRemoved = [...fields];
|
||||||
|
const removedField = fieldWithoutRemoved.splice(fieldIndex, 1);
|
||||||
|
setFields(fieldWithoutRemoved);
|
||||||
|
|
||||||
|
const signaturesWithoutRemoved = [...localSignatures];
|
||||||
|
const removedSignature = signaturesWithoutRemoved.splice(
|
||||||
|
signaturesWithoutRemoved.findIndex(function (i) {
|
||||||
|
return i.fieldId === id;
|
||||||
|
}),
|
||||||
|
1
|
||||||
|
);
|
||||||
|
|
||||||
|
setLocalSignatures(signaturesWithoutRemoved);
|
||||||
|
deleteField(field).catch((err) => {
|
||||||
|
setFields(fieldWithoutRemoved.concat(removedField));
|
||||||
|
setLocalSignatures(signaturesWithoutRemoved.concat(removedSignature));
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
setSigningDone(checkIfSigningIsDone());
|
||||||
|
}, [fields]);
|
||||||
|
|
||||||
|
useEffect(() => {
|
||||||
|
const nameFields = fields.filter((field) => field.type === FieldType.NAME);
|
||||||
|
|
||||||
|
if (nameFields.length > 0) {
|
||||||
|
nameFields.forEach((field) => {
|
||||||
|
if (!field.signature && props.recipient?.name) {
|
||||||
|
signField({
|
||||||
|
fieldId: field.id,
|
||||||
|
type: "type",
|
||||||
|
typedSignature: props.recipient.name,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
// We are intentionally not specifying deps here
|
||||||
|
// because we want to run this effect on the initial render
|
||||||
|
}, []);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<>
|
<>
|
||||||
<SignatureDialog
|
<SignatureDialog
|
||||||
@ -80,6 +171,7 @@ export default function PDFSigner(props: any) {
|
|||||||
setOpen={setSignatureDialogOpen}
|
setOpen={setSignatureDialogOpen}
|
||||||
onClose={onDialogClose}
|
onClose={onDialogClose}
|
||||||
/>
|
/>
|
||||||
|
|
||||||
<NameDialog
|
<NameDialog
|
||||||
open={nameDialogOpen}
|
open={nameDialogOpen}
|
||||||
setOpen={setNameDialogOpen}
|
setOpen={setNameDialogOpen}
|
||||||
@ -153,52 +245,4 @@ export default function PDFSigner(props: any) {
|
|||||||
onDelete={onDeleteHandler}></PDFViewer>
|
onDelete={onDeleteHandler}></PDFViewer>
|
||||||
</>
|
</>
|
||||||
);
|
);
|
||||||
|
|
||||||
function checkIfSigningIsDone(): boolean {
|
|
||||||
// Check if all fields are signed..
|
|
||||||
if (signatureFields.length > 0) {
|
|
||||||
// If there are no fields to sign at least one signature is enough
|
|
||||||
return fields
|
|
||||||
.filter((field) => field.type === FieldType.SIGNATURE)
|
|
||||||
.every((field) => field.signature);
|
|
||||||
} else {
|
|
||||||
return localSignatures.length > 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function addFreeSignature(e: any, page: number, recipient: any): any {
|
|
||||||
const freeSignatureField = createField(e, page, recipient, FieldType.FREE_SIGNATURE);
|
|
||||||
|
|
||||||
createOrUpdateField(props.document, freeSignatureField, recipient.token).then((res) => {
|
|
||||||
setFields((prevState) => [...prevState, res]);
|
|
||||||
setDialogField(res);
|
|
||||||
setSignatureDialogOpen(true);
|
|
||||||
});
|
|
||||||
|
|
||||||
return freeSignatureField;
|
|
||||||
}
|
|
||||||
|
|
||||||
function onDeleteHandler(id: any) {
|
|
||||||
const field = fields.find((e) => e.id == id);
|
|
||||||
const fieldIndex = fields.map((item) => item.id).indexOf(id);
|
|
||||||
if (fieldIndex > -1) {
|
|
||||||
const fieldWithoutRemoved = [...fields];
|
|
||||||
const removedField = fieldWithoutRemoved.splice(fieldIndex, 1);
|
|
||||||
setFields(fieldWithoutRemoved);
|
|
||||||
|
|
||||||
const signaturesWithoutRemoved = [...localSignatures];
|
|
||||||
const removedSignature = signaturesWithoutRemoved.splice(
|
|
||||||
signaturesWithoutRemoved.findIndex(function (i) {
|
|
||||||
return i.fieldId === id;
|
|
||||||
}),
|
|
||||||
1
|
|
||||||
);
|
|
||||||
|
|
||||||
setLocalSignatures(signaturesWithoutRemoved);
|
|
||||||
deleteField(field).catch((err) => {
|
|
||||||
setFields(fieldWithoutRemoved.concat(removedField));
|
|
||||||
setLocalSignatures(signaturesWithoutRemoved.concat(removedSignature));
|
|
||||||
});
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user