react-native-rectangle-doc-scanner 3.120.0 → 3.122.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.
@@ -191,27 +191,31 @@ const FullDocScanner = ({ onResult, onClose, detectionConfig, overlayColor = '#3
191
191
  });
192
192
  }
193
193
  catch (error) {
194
- console.error('[FullDocScanner] openCropper error:', error);
195
194
  setProcessing(false);
196
195
  // Reset capture state when cropper fails or is cancelled
197
196
  captureInProgressRef.current = false;
198
197
  captureModeRef.current = null;
198
+ setRectangleDetected(false);
199
+ setRectangleHint(false);
200
+ if (docScannerRef.current?.reset) {
201
+ docScannerRef.current.reset();
202
+ }
199
203
  const errorCode = error?.code;
200
- const errorMessage = error?.message || String(error);
204
+ const errorMessageRaw = error?.message ?? String(error);
205
+ const errorMessage = typeof errorMessageRaw === 'string' ? errorMessageRaw : String(errorMessageRaw);
206
+ const normalizedMessage = errorMessage.toLowerCase();
207
+ const isUserCancelled = errorCode === 'E_PICKER_CANCELLED' ||
208
+ normalizedMessage === 'user cancelled image selection' ||
209
+ normalizedMessage.includes('cancel');
210
+ if (isUserCancelled) {
211
+ console.log('[FullDocScanner] User cancelled cropper');
212
+ return;
213
+ }
214
+ console.error('[FullDocScanner] openCropper error:', error);
201
215
  if (errorCode === CROPPER_TIMEOUT_CODE || errorMessage === CROPPER_TIMEOUT_CODE) {
202
216
  console.error('[FullDocScanner] Cropper timed out waiting for presentation');
203
217
  emitError(error instanceof Error ? error : new Error('Cropper timed out'), 'Failed to open crop editor. Please try again.');
204
218
  }
205
- else if (errorCode === 'E_PICKER_CANCELLED' ||
206
- errorMessage === 'User cancelled image selection' ||
207
- errorMessage.includes('cancelled') ||
208
- errorMessage.includes('cancel')) {
209
- console.log('[FullDocScanner] User cancelled cropper');
210
- // DocScanner 상태를 리셋하여 카메라가 다시 작동하도록 함
211
- if (docScannerRef.current?.reset) {
212
- docScannerRef.current.reset();
213
- }
214
- }
215
219
  else {
216
220
  emitError(error instanceof Error ? error : new Error(errorMessage), 'Failed to crop image. Please try again.');
217
221
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "react-native-rectangle-doc-scanner",
3
- "version": "3.120.0",
3
+ "version": "3.122.0",
4
4
  "description": "Native-backed document scanner for React Native with customizable overlays.",
5
5
  "license": "MIT",
6
6
  "main": "dist/index.js",
@@ -268,15 +268,32 @@ export const FullDocScanner: React.FC<FullDocScannerProps> = ({
268
268
  base64: croppedImage.data ?? undefined,
269
269
  });
270
270
  } catch (error) {
271
- console.error('[FullDocScanner] openCropper error:', error);
272
271
  setProcessing(false);
273
272
 
274
273
  // Reset capture state when cropper fails or is cancelled
275
274
  captureInProgressRef.current = false;
276
275
  captureModeRef.current = null;
276
+ setRectangleDetected(false);
277
+ setRectangleHint(false);
278
+ if (docScannerRef.current?.reset) {
279
+ docScannerRef.current.reset();
280
+ }
277
281
 
278
282
  const errorCode = (error as any)?.code;
279
- const errorMessage = (error as any)?.message || String(error);
283
+ const errorMessageRaw = (error as any)?.message ?? String(error);
284
+ const errorMessage = typeof errorMessageRaw === 'string' ? errorMessageRaw : String(errorMessageRaw);
285
+ const normalizedMessage = errorMessage.toLowerCase();
286
+ const isUserCancelled =
287
+ errorCode === 'E_PICKER_CANCELLED' ||
288
+ normalizedMessage === 'user cancelled image selection' ||
289
+ normalizedMessage.includes('cancel');
290
+
291
+ if (isUserCancelled) {
292
+ console.log('[FullDocScanner] User cancelled cropper');
293
+ return;
294
+ }
295
+
296
+ console.error('[FullDocScanner] openCropper error:', error);
280
297
 
281
298
  if (errorCode === CROPPER_TIMEOUT_CODE || errorMessage === CROPPER_TIMEOUT_CODE) {
282
299
  console.error('[FullDocScanner] Cropper timed out waiting for presentation');
@@ -284,17 +301,6 @@ export const FullDocScanner: React.FC<FullDocScannerProps> = ({
284
301
  error instanceof Error ? error : new Error('Cropper timed out'),
285
302
  'Failed to open crop editor. Please try again.',
286
303
  );
287
- } else if (
288
- errorCode === 'E_PICKER_CANCELLED' ||
289
- errorMessage === 'User cancelled image selection' ||
290
- errorMessage.includes('cancelled') ||
291
- errorMessage.includes('cancel')
292
- ) {
293
- console.log('[FullDocScanner] User cancelled cropper');
294
- // DocScanner 상태를 리셋하여 카메라가 다시 작동하도록 함
295
- if (docScannerRef.current?.reset) {
296
- docScannerRef.current.reset();
297
- }
298
304
  } else {
299
305
  emitError(
300
306
  error instanceof Error ? error : new Error(errorMessage),