react-pdf-editor-1 1.2.43 → 1.2.45

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -68,6 +68,7 @@ var useCreateIframeAndLoadViewer = function useCreateIframeAndLoadViewer(_ref) {
68
68
  _useState16 = _slicedToArray(_useState15, 2),
69
69
  signatureModalOpen = _useState16[0],
70
70
  setSignatureModalOpen = _useState16[1];
71
+ var documentUpdatedListeners = (0, _react.useRef)(new Set());
71
72
  var createIframe = function createIframe() {
72
73
  var iframe = document.createElement('iframe');
73
74
  iframe.src = iframeSrc || "/pdf-ui/index.html";
@@ -120,6 +121,7 @@ var useCreateIframeAndLoadViewer = function useCreateIframeAndLoadViewer(_ref) {
120
121
 
121
122
  // Set up an event listener to listen for a response from the iframe
122
123
  window.parent.addEventListener('message', function (event) {
124
+ var _event$data;
123
125
  if (event.data.type === 'file-received' && event.data.success) {
124
126
  // If the message was received successfully, clear the interval
125
127
  clearInterval(interval);
@@ -148,6 +150,15 @@ var useCreateIframeAndLoadViewer = function useCreateIframeAndLoadViewer(_ref) {
148
150
  if (event.data.type === "annotation-modal-open-change") {
149
151
  setSignatureModalOpen(event.data.message);
150
152
  }
153
+ if (((_event$data = event.data) === null || _event$data === void 0 ? void 0 : _event$data.type) === 'document-updated') {
154
+ documentUpdatedListeners.current.forEach(function (listener) {
155
+ try {
156
+ listener(event.data.message);
157
+ } catch (listenerError) {
158
+ console.error('Error running document-updated listener', listenerError);
159
+ }
160
+ });
161
+ }
151
162
  });
152
163
  };
153
164
  container.current.appendChild(iframe);
@@ -186,6 +197,11 @@ var useCreateIframeAndLoadViewer = function useCreateIframeAndLoadViewer(_ref) {
186
197
  return window.parent.removeEventListener('message', handleIframeLoaded);
187
198
  };
188
199
  }, []);
200
+ (0, _react.useEffect)(function () {
201
+ return function () {
202
+ documentUpdatedListeners.current.clear();
203
+ };
204
+ }, []);
189
205
  var _useState17 = (0, _react.useState)(null),
190
206
  _useState18 = _slicedToArray(_useState17, 2),
191
207
  clickedTag = _useState18[0],
@@ -560,6 +576,16 @@ var useCreateIframeAndLoadViewer = function useCreateIframeAndLoadViewer(_ref) {
560
576
  return _ref9.apply(this, arguments);
561
577
  };
562
578
  }();
579
+ var onDocumentUpdated = (0, _react.useCallback)(function (listener) {
580
+ if (typeof listener !== 'function') {
581
+ console.warn('onDocumentUpdated requires a function listener');
582
+ return function () {};
583
+ }
584
+ documentUpdatedListeners.current.add(listener);
585
+ return function () {
586
+ documentUpdatedListeners.current["delete"](listener);
587
+ };
588
+ }, []);
563
589
  return {
564
590
  requestBuffer: requestBuffer,
565
591
  finalizeDocument: finalizeDocument,
@@ -582,7 +608,8 @@ var useCreateIframeAndLoadViewer = function useCreateIframeAndLoadViewer(_ref) {
582
608
  notarySealIds: notarySealIds,
583
609
  hasSeal: hasSeal,
584
610
  authTokens: authTokens,
585
- signatureModalOpen: signatureModalOpen
611
+ signatureModalOpen: signatureModalOpen,
612
+ onDocumentUpdated: onDocumentUpdated
586
613
  };
587
614
  };
588
615
  exports.useCreateIframeAndLoadViewer = useCreateIframeAndLoadViewer;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-pdf-editor-1",
3
- "version": "1.2.43",
3
+ "version": "1.2.45",
4
4
  "description": "## Core",
5
5
  "main": "dist/index.js",
6
6
  "scripts": {
package/src/index.d.ts CHANGED
@@ -16,6 +16,7 @@ declare module 'pdf_editor_aleon35_react_plugin' {
16
16
  mode?: "split" | "regular",
17
17
  fileName?: string;
18
18
  onFileFailed?: (message: string) => void;
19
+ hideUndoRedoButtons?: boolean;
19
20
  }
20
21
  ) => {
21
22
  combineFiles: () => void;
@@ -29,5 +30,6 @@ declare module 'pdf_editor_aleon35_react_plugin' {
29
30
  splitPages: () => void;
30
31
  extractPages: () => void;
31
32
  selectedPages: number[];
33
+ onDocumentUpdated: (listener: (pdfData: Uint8Array) => void) => () => void;
32
34
  };
33
35
  }
package/src/index.js CHANGED
@@ -1,4 +1,4 @@
1
- import { useEffect, useRef, useState } from 'react';
1
+ import { useCallback, useEffect, useRef, useState } from 'react';
2
2
 
3
3
  export const useCreateIframeAndLoadViewer = ({
4
4
  files,
@@ -18,7 +18,8 @@ export const useCreateIframeAndLoadViewer = ({
18
18
  notarySeal,
19
19
  initialSigners,
20
20
  modifiedUiElements,
21
- textTagDefaults
21
+ textTagDefaults,
22
+ hideUndoRedoButtons
22
23
  }) => {
23
24
  const [internalIsReady, setInternalIsReady] = useState(false); // Add this state variable
24
25
  const [selectedPages, setSelectedPages] = useState([]);
@@ -30,6 +31,7 @@ export const useCreateIframeAndLoadViewer = ({
30
31
  const [notarySealIds, setNotarySealIds] = useState([]);
31
32
  const [authTokens, setAuthTokens] = useState(null);
32
33
  const [signatureModalOpen, setSignatureModalOpen] = useState(false);
34
+ const documentUpdatedListeners = useRef(new Set());
33
35
 
34
36
  const createIframe = () => {
35
37
  const iframe = document.createElement('iframe');
@@ -54,7 +56,7 @@ export const useCreateIframeAndLoadViewer = ({
54
56
  // When the iframe is loaded, post the file to it
55
57
  iframe.onload = function() {
56
58
  const targetOrigin = window.location.origin;
57
- const message = { files, fileName, tools, locale, licenseKey, mode, uuid, customData, initialAnnotations, notarySeal, initialSigners, modifiedUiElements, authInfo, defaultAnnotationEditorMode, textTagDefaults };
59
+ const message = { files, fileName, tools, locale, licenseKey, mode, uuid, customData, initialAnnotations, notarySeal, initialSigners, modifiedUiElements, authInfo, defaultAnnotationEditorMode, textTagDefaults, hideUndoRedoButtons };
58
60
 
59
61
  // Set up a function to send the message
60
62
  const sendMessage = () => {
@@ -98,6 +100,16 @@ export const useCreateIframeAndLoadViewer = ({
98
100
  if (event.data.type === "annotation-modal-open-change") {
99
101
  setSignatureModalOpen(event.data.message);
100
102
  }
103
+ if (event.data?.type === 'document-updated') {
104
+ documentUpdatedListeners.current.forEach((listener) => {
105
+ try {
106
+ listener(event.data.message);
107
+ }
108
+ catch (listenerError) {
109
+ console.error('Error running document-updated listener', listenerError);
110
+ }
111
+ });
112
+ }
101
113
  });
102
114
  };
103
115
 
@@ -135,6 +147,10 @@ export const useCreateIframeAndLoadViewer = ({
135
147
  return () => window.parent.removeEventListener('message', handleIframeLoaded);
136
148
  }, []);
137
149
 
150
+ useEffect(() => () => {
151
+ documentUpdatedListeners.current.clear();
152
+ }, []);
153
+
138
154
  const [clickedTag, setClickedTag] = useState(null);
139
155
 
140
156
  const handleTagClicked = (event) => {
@@ -180,6 +196,18 @@ export const useCreateIframeAndLoadViewer = ({
180
196
  };
181
197
  }, []);
182
198
 
199
+ useEffect(() => {
200
+ if (typeof hideUndoRedoButtons === 'undefined') {
201
+ return;
202
+ }
203
+ if (!internalIsReady) {
204
+ return;
205
+ }
206
+ // @ts-ignore
207
+ const iframeWin = document?.getElementById('webviewer-1')?.contentWindow;
208
+ iframeWin?.postMessage({ hideUndoRedoButtons }, window.location.origin);
209
+ }, [hideUndoRedoButtons, internalIsReady]);
210
+
183
211
  const download = () => {
184
212
  // @ts-ignore
185
213
  var iframeWin = document?.getElementById('webviewer-1')?.contentWindow;
@@ -387,6 +415,19 @@ export const useCreateIframeAndLoadViewer = ({
387
415
  });
388
416
  };
389
417
 
418
+ const onDocumentUpdated = useCallback((listener) => {
419
+ if (typeof listener !== 'function') {
420
+ console.warn('onDocumentUpdated requires a function listener');
421
+ return () => {};
422
+ }
423
+
424
+ documentUpdatedListeners.current.add(listener);
425
+
426
+ return () => {
427
+ documentUpdatedListeners.current.delete(listener);
428
+ };
429
+ }, []);
430
+
390
431
  return {
391
432
  requestBuffer,
392
433
  finalizeDocument,
@@ -408,6 +449,7 @@ export const useCreateIframeAndLoadViewer = ({
408
449
  notarySealIds,
409
450
  hasSeal,
410
451
  authTokens,
411
- signatureModalOpen
452
+ signatureModalOpen,
453
+ onDocumentUpdated
412
454
  };
413
455
  };