pdf-e-signature
Version:
A React component that allows users to select positions for e-signatures on PDFs
61 lines (60 loc) • 1.94 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.useSignature = void 0;
var _react = require("react");
const useSignature = () => {
const [isModalOpen, setIsModalOpen] = (0, _react.useState)(false);
const [selectedPosition, setSelectedPosition] = (0, _react.useState)(null);
const [signaturePositions, setSignaturePositions] = (0, _react.useState)([]);
const signatureRef = (0, _react.useRef)(null);
const clearSignature = () => {
signatureRef.current.clear();
};
const saveSignature = async (signaturePositions, onUpdate) => {
if (!selectedPosition) return;
const signatureImage = signatureRef.current.toDataURL('image/png', {
backgroundColor: 'transparent'
});
const timestamp = new Date().toLocaleString();
const updatedPositions = signaturePositions.map(pos => pos === selectedPosition ? {
...pos,
signature: signatureImage,
timestamp: timestamp
} : pos);
onUpdate(updatedPositions);
setIsModalOpen(false);
setSelectedPosition(null);
};
const handleSignatureUpload = async (e, signaturePositions, onUpdate) => {
const file = e.target.files[0];
if (!file || !selectedPosition) return;
const reader = new FileReader();
reader.onload = async () => {
const timestamp = new Date().toLocaleString();
const updatedPositions = signaturePositions.map(pos => pos === selectedPosition ? {
...pos,
signature: reader.result,
timestamp: timestamp
} : pos);
onUpdate(updatedPositions);
setIsModalOpen(false);
setSelectedPosition(null);
};
reader.readAsDataURL(file);
};
return {
isModalOpen,
setIsModalOpen,
selectedPosition,
setSelectedPosition,
signatureRef,
clearSignature,
saveSignature,
handleSignatureUpload,
setSignaturePositions,
signaturePositions
};
};
exports.useSignature = useSignature;