react-native-rectangle-doc-scanner 3.53.0 → 3.54.0

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.
@@ -61,6 +61,7 @@ const FullDocScanner = ({ onResult, onClose, detectionConfig, overlayColor = '#3
61
61
  const resolvedGridColor = gridColor ?? overlayColor;
62
62
  const docScannerRef = (0, react_1.useRef)(null);
63
63
  const captureModeRef = (0, react_1.useRef)(null);
64
+ const captureInProgressRef = (0, react_1.useRef)(false);
64
65
  const mergedStrings = (0, react_1.useMemo)(() => ({
65
66
  captureHint: strings?.captureHint,
66
67
  manualHint: strings?.manualHint,
@@ -122,6 +123,7 @@ const FullDocScanner = ({ onResult, onClose, detectionConfig, overlayColor = '#3
122
123
  initialPath: document.initialPath,
123
124
  captureMode: captureModeRef.current,
124
125
  });
126
+ captureInProgressRef.current = false;
125
127
  if (document.origin === 'auto') {
126
128
  console.log('[FullDocScanner] Ignoring auto capture result');
127
129
  return;
@@ -150,33 +152,39 @@ const FullDocScanner = ({ onResult, onClose, detectionConfig, overlayColor = '#3
150
152
  await openCropper(normalizedDoc.path);
151
153
  }, [openCropper]);
152
154
  const triggerManualCapture = (0, react_1.useCallback)(() => {
155
+ const scannerInstance = docScannerRef.current;
156
+ const hasScanner = !!scannerInstance;
153
157
  console.log('[FullDocScanner] triggerManualCapture called', {
154
158
  processing,
155
- hasRef: !!docScannerRef.current,
159
+ hasRef: hasScanner,
156
160
  rectangleDetected,
157
161
  currentCaptureMode: captureModeRef.current,
162
+ captureInProgress: captureInProgressRef.current,
158
163
  });
159
164
  if (processing) {
160
165
  console.log('[FullDocScanner] Already processing, skipping manual capture');
161
166
  return;
162
167
  }
163
- // Check if capture is already in progress
164
- if (captureModeRef.current !== null) {
168
+ if (captureInProgressRef.current) {
165
169
  console.log('[FullDocScanner] Capture already in progress, skipping');
166
170
  return;
167
171
  }
168
- if (!docScannerRef.current) {
172
+ if (!hasScanner) {
169
173
  console.error('[FullDocScanner] DocScanner ref not available');
170
174
  return;
171
175
  }
172
176
  console.log('[FullDocScanner] Starting manual capture, grid detected:', rectangleDetected);
173
- captureModeRef.current = rectangleDetected ? 'grid' : 'no-grid';
174
- docScannerRef.current.capture()
177
+ const captureMode = rectangleDetected ? 'grid' : 'no-grid';
178
+ captureModeRef.current = captureMode;
179
+ captureInProgressRef.current = true;
180
+ scannerInstance.capture()
175
181
  .then((result) => {
176
182
  console.log('[FullDocScanner] Manual capture success:', result);
183
+ captureInProgressRef.current = false;
177
184
  })
178
185
  .catch((error) => {
179
186
  captureModeRef.current = null;
187
+ captureInProgressRef.current = false;
180
188
  console.error('[FullDocScanner] Manual capture failed:', error);
181
189
  if (error instanceof Error && error.message !== 'capture_in_progress') {
182
190
  emitError(error, 'Failed to capture image.');
@@ -227,6 +235,7 @@ const FullDocScanner = ({ onResult, onClose, detectionConfig, overlayColor = '#3
227
235
  setProcessing(false);
228
236
  setRectangleDetected(false);
229
237
  captureModeRef.current = null;
238
+ captureInProgressRef.current = false;
230
239
  // Reset DocScanner state
231
240
  if (docScannerRef.current?.reset) {
232
241
  docScannerRef.current.reset();
@@ -235,7 +244,7 @@ const FullDocScanner = ({ onResult, onClose, detectionConfig, overlayColor = '#3
235
244
  const handleRectangleDetect = (0, react_1.useCallback)((event) => {
236
245
  const stableCounter = event.stableCounter ?? 0;
237
246
  const hasRectangle = Boolean(event.rectangleOnScreen ?? event.rectangleCoordinates);
238
- const isGoodRectangle = event.lastDetectionType === 0 && hasRectangle && stableCounter > 0;
247
+ const isGoodRectangle = hasRectangle;
239
248
  setRectangleDetected((prev) => {
240
249
  if (prev !== isGoodRectangle) {
241
250
  console.log('[FullDocScanner] Rectangle detection update', {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-rectangle-doc-scanner",
3
- "version": "3.53.0",
3
+ "version": "3.54.0",
4
4
  "description": "Native-backed document scanner for React Native with customizable overlays.",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",
@@ -89,6 +89,7 @@ export const FullDocScanner: React.FC<FullDocScannerProps> = ({
89
89
  const resolvedGridColor = gridColor ?? overlayColor;
90
90
  const docScannerRef = useRef<DocScannerHandle | null>(null);
91
91
  const captureModeRef = useRef<'grid' | 'no-grid' | null>(null);
92
+ const captureInProgressRef = useRef(false);
92
93
 
93
94
  const mergedStrings = useMemo(
94
95
  () => ({
@@ -169,6 +170,8 @@ export const FullDocScanner: React.FC<FullDocScannerProps> = ({
169
170
  captureMode: captureModeRef.current,
170
171
  });
171
172
 
173
+ captureInProgressRef.current = false;
174
+
172
175
  if (document.origin === 'auto') {
173
176
  console.log('[FullDocScanner] Ignoring auto capture result');
174
177
  return;
@@ -207,11 +210,14 @@ export const FullDocScanner: React.FC<FullDocScannerProps> = ({
207
210
  );
208
211
 
209
212
  const triggerManualCapture = useCallback(() => {
213
+ const scannerInstance = docScannerRef.current;
214
+ const hasScanner = !!scannerInstance;
210
215
  console.log('[FullDocScanner] triggerManualCapture called', {
211
216
  processing,
212
- hasRef: !!docScannerRef.current,
217
+ hasRef: hasScanner,
213
218
  rectangleDetected,
214
219
  currentCaptureMode: captureModeRef.current,
220
+ captureInProgress: captureInProgressRef.current,
215
221
  });
216
222
 
217
223
  if (processing) {
@@ -219,27 +225,30 @@ export const FullDocScanner: React.FC<FullDocScannerProps> = ({
219
225
  return;
220
226
  }
221
227
 
222
- // Check if capture is already in progress
223
- if (captureModeRef.current !== null) {
228
+ if (captureInProgressRef.current) {
224
229
  console.log('[FullDocScanner] Capture already in progress, skipping');
225
230
  return;
226
231
  }
227
232
 
228
- if (!docScannerRef.current) {
233
+ if (!hasScanner) {
229
234
  console.error('[FullDocScanner] DocScanner ref not available');
230
235
  return;
231
236
  }
232
237
 
233
238
  console.log('[FullDocScanner] Starting manual capture, grid detected:', rectangleDetected);
234
239
 
235
- captureModeRef.current = rectangleDetected ? 'grid' : 'no-grid';
240
+ const captureMode = rectangleDetected ? 'grid' : 'no-grid';
241
+ captureModeRef.current = captureMode;
242
+ captureInProgressRef.current = true;
236
243
 
237
- docScannerRef.current.capture()
244
+ scannerInstance.capture()
238
245
  .then((result) => {
239
246
  console.log('[FullDocScanner] Manual capture success:', result);
247
+ captureInProgressRef.current = false;
240
248
  })
241
249
  .catch((error: unknown) => {
242
250
  captureModeRef.current = null;
251
+ captureInProgressRef.current = false;
243
252
  console.error('[FullDocScanner] Manual capture failed:', error);
244
253
  if (error instanceof Error && error.message !== 'capture_in_progress') {
245
254
  emitError(
@@ -304,6 +313,7 @@ export const FullDocScanner: React.FC<FullDocScannerProps> = ({
304
313
  setProcessing(false);
305
314
  setRectangleDetected(false);
306
315
  captureModeRef.current = null;
316
+ captureInProgressRef.current = false;
307
317
  // Reset DocScanner state
308
318
  if (docScannerRef.current?.reset) {
309
319
  docScannerRef.current.reset();
@@ -313,7 +323,7 @@ export const FullDocScanner: React.FC<FullDocScannerProps> = ({
313
323
  const handleRectangleDetect = useCallback((event: RectangleDetectEvent) => {
314
324
  const stableCounter = event.stableCounter ?? 0;
315
325
  const hasRectangle = Boolean(event.rectangleOnScreen ?? event.rectangleCoordinates);
316
- const isGoodRectangle = event.lastDetectionType === 0 && hasRectangle && stableCounter > 0;
326
+ const isGoodRectangle = hasRectangle;
317
327
 
318
328
  setRectangleDetected((prev) => {
319
329
  if (prev !== isGoodRectangle) {