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.
- package/dist/FullDocScanner.js +16 -7
- package/package.json +1 -1
- package/src/FullDocScanner.tsx +17 -7
package/dist/FullDocScanner.js
CHANGED
|
@@ -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:
|
|
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
|
-
|
|
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 (!
|
|
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
|
-
|
|
174
|
-
|
|
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 =
|
|
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
package/src/FullDocScanner.tsx
CHANGED
|
@@ -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:
|
|
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
|
-
|
|
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 (!
|
|
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
|
-
|
|
240
|
+
const captureMode = rectangleDetected ? 'grid' : 'no-grid';
|
|
241
|
+
captureModeRef.current = captureMode;
|
|
242
|
+
captureInProgressRef.current = true;
|
|
236
243
|
|
|
237
|
-
|
|
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 =
|
|
326
|
+
const isGoodRectangle = hasRectangle;
|
|
317
327
|
|
|
318
328
|
setRectangleDetected((prev) => {
|
|
319
329
|
if (prev !== isGoodRectangle) {
|