pdf-e-signature
Version:
A React component that allows users to select positions for e-signatures on PDFs
126 lines (124 loc) • 5.28 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = void 0;
var _react = _interopRequireWildcard(require("react"));
var _reactPdf = require("react-pdf");
var _PDFViewer = _interopRequireDefault(require("./components/PDFViewer"));
var _LoadingSpinner = _interopRequireDefault(require("./components/LoadingSpinner"));
var _usePDFOperations = _interopRequireDefault(require("./hooks/usePDFOperations"));
require("./index.css");
var _pdfWorker = _interopRequireDefault(require("pdfjs-dist/build/pdf.worker.entry"));
function _interopRequireDefault(e) { return e && e.__esModule ? e : { default: e }; }
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function (e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != typeof e && "function" != typeof e) return { default: e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n.default = e, t && t.set(e, n), n; }
// Configure PDF.js worker
_reactPdf.pdfjs.GlobalWorkerOptions.workerSrc = _pdfWorker.default;
function PDFSignatureSelector(_ref) {
let {
onSave,
pdfUrl,
pdfFile
} = _ref;
const {
numPages,
currentPage,
scale,
signaturePositions,
isSelectingPosition,
viewMode,
containerRef,
setNumPages,
setCurrentPage,
setScale,
setIsSelectingPosition,
handlePdfClick,
resetState,
handleMouseMove,
cursorPosition,
handleRemoveSign
} = (0, _usePDFOperations.default)();
const [isSavingDocument, setIsSavingDocument] = (0, _react.useState)(false);
const togglePositionSelection = () => {
setIsSelectingPosition(!isSelectingPosition);
};
const handleSaveDocument = async () => {
if (!pdfUrl || signaturePositions.length === 0) {
alert('Please upload a PDF and select at least one signature position');
if (typeof onSave === 'function') {
onSave({
success: false,
error: 'Please upload a PDF and select at least one signature position'
});
return;
}
}
try {
setIsSavingDocument(true);
// Return the positions and PDF data
if (typeof onSave === 'function') {
onSave({
success: true,
pdfUrl,
pdfFile,
signaturePositions,
createdAt: new Date().toISOString()
});
}
} catch (error) {
console.error('Error saving document:', error);
alert('Error saving document. Please try again.');
if (typeof onSave === 'function') {
onSave({
success: false,
error: 'Error saving document'
});
}
} finally {
setIsSavingDocument(false);
}
};
return /*#__PURE__*/_react.default.createElement("div", {
className: "flex flex-col items-center min-h-screen bg-gray-100 p-4"
}, /*#__PURE__*/_react.default.createElement("div", {
className: "w-full flex flex-col items-center"
}, (pdfUrl || pdfFile) && /*#__PURE__*/_react.default.createElement("div", {
className: "flex space-x-4 mb-4"
}, /*#__PURE__*/_react.default.createElement("button", {
onClick: togglePositionSelection,
disabled: isSavingDocument,
className: `px-4 py-2 rounded ${isSelectingPosition ? 'bg-red-500 text-white' : 'bg-blue-500 text-white'} disabled:bg-gray-300`
}, isSelectingPosition ? 'Cancel Selection' : 'Select Signature Positions'), /*#__PURE__*/_react.default.createElement("button", {
onClick: handleSaveDocument,
disabled: signaturePositions.length === 0 || isSavingDocument,
className: "px-4 py-2 bg-green-500 text-white rounded disabled:bg-gray-300"
}, isSavingDocument ? /*#__PURE__*/_react.default.createElement(_LoadingSpinner.default, {
text: "Saving document..."
}) : "Save Document"), /*#__PURE__*/_react.default.createElement("button", {
onClick: resetState,
disabled: isSavingDocument,
className: "px-4 py-2 bg-red-500 text-white rounded disabled:bg-gray-300"
}, "Back to Documents")), /*#__PURE__*/_react.default.createElement("div", {
className: "w-full max-w-4xl"
}, /*#__PURE__*/_react.default.createElement("h2", {
className: "text-lg font-semibold mb-2"
}, "Document Preview"), /*#__PURE__*/_react.default.createElement(_PDFViewer.default, {
pdfUrl: pdfUrl,
currentPage: currentPage,
numPages: numPages,
scale: scale,
signaturePositions: signaturePositions,
isSelectingPosition: isSelectingPosition,
onPageChange: setCurrentPage,
onScaleChange: setScale,
onPdfClick: handlePdfClick,
containerRef: containerRef,
viewMode: viewMode,
setNumPages: setNumPages,
cursorPosition: cursorPosition,
handleMouseMove: handleMouseMove,
handleRemoveSign: handleRemoveSign
}))));
}
var _default = exports.default = PDFSignatureSelector;