2026-06-02 16:59:03 -04:00
|
|
|
import { useRef } from 'react';
|
2026-06-02 16:44:56 -04:00
|
|
|
import { useCameraScanner } from '../lib/use-camera-scanner.js';
|
2026-06-02 16:59:03 -04:00
|
|
|
import { useScannerIdentification } from '../lib/use-scanner-identification.js';
|
2026-06-02 17:04:02 -04:00
|
|
|
import CameraScannerView from './CameraScannerView.js';
|
2026-05-27 14:57:26 -04:00
|
|
|
|
2025-07-29 15:19:48 -04:00
|
|
|
export default function CameraScanner({ onCardScanned, onError }) {
|
2026-06-02 16:44:56 -04:00
|
|
|
const verificationPausedRef = useRef(false);
|
|
|
|
|
const onVerifyCardRef = useRef(() => {});
|
2025-07-29 15:19:48 -04:00
|
|
|
|
2026-06-02 17:04:02 -04:00
|
|
|
const camera = useCameraScanner({
|
2026-06-02 16:44:56 -04:00
|
|
|
onError,
|
|
|
|
|
verificationPausedRef,
|
|
|
|
|
onVerifyCard: (card) => onVerifyCardRef.current(card),
|
|
|
|
|
});
|
2025-07-29 15:19:48 -04:00
|
|
|
|
2026-06-02 17:04:02 -04:00
|
|
|
const identification = useScannerIdentification({
|
2026-06-02 16:59:03 -04:00
|
|
|
onCardScanned,
|
|
|
|
|
onError,
|
2026-06-02 17:04:02 -04:00
|
|
|
videoRef: camera.videoRef,
|
|
|
|
|
canvasRef: camera.canvasRef,
|
2026-06-02 16:59:03 -04:00
|
|
|
onVerifyCardRef,
|
|
|
|
|
verificationPausedRef,
|
2026-06-02 16:44:56 -04:00
|
|
|
});
|
2026-06-02 02:03:36 -04:00
|
|
|
|
2025-07-29 15:19:48 -04:00
|
|
|
return (
|
2026-06-02 17:04:02 -04:00
|
|
|
<CameraScannerView
|
|
|
|
|
videoRef={camera.videoRef}
|
|
|
|
|
canvasRef={camera.canvasRef}
|
|
|
|
|
detectionCanvasRef={camera.detectionCanvasRef}
|
|
|
|
|
isStreaming={camera.isStreaming}
|
|
|
|
|
isDetecting={camera.isDetecting}
|
|
|
|
|
trackedCards={camera.trackedCards}
|
|
|
|
|
videoMetrics={camera.videoMetrics}
|
|
|
|
|
startCamera={camera.startCamera}
|
|
|
|
|
stopCamera={camera.stopCamera}
|
|
|
|
|
scanNotice={identification.scanNotice}
|
|
|
|
|
disambiguation={identification.disambiguation}
|
|
|
|
|
submittingReview={identification.submittingReview}
|
|
|
|
|
onPick={identification.handleDisambiguationPick}
|
|
|
|
|
onNotInCatalog={identification.handleNotInCatalog}
|
|
|
|
|
onCancelDisambiguation={identification.cancelDisambiguation}
|
|
|
|
|
/>
|
2025-07-29 15:19:48 -04:00
|
|
|
);
|
2026-06-02 16:34:13 -04:00
|
|
|
}
|