* feat: CodeScanner JS API * feat: iOS * Use guard * Format * feat: Android base * fix: Attach Surfaces * Use isBusy var * fix: Use separate Queue * feat: Finish iOS types * feat: Implement all other code types on Android * fix: Call JS event * fix: Pass codetypes on Android * fix: iOS use Preview coordinate system * docs: Add comments * chore: Format code * Update CameraView+AVCaptureSession.swift * docs: Add Code Scanner docs * docs: Update * feat: Use lazily downloaded model on Android * Revert changes in CameraPage * Format * fix: Fix empty QR codes * Update README.md
24 lines
765 B
TypeScript
24 lines
765 B
TypeScript
import { useCallback, useMemo, useRef } from 'react'
|
|
import { Code, CodeScanner } from '../CodeScanner'
|
|
|
|
export function useCodeScanner(codeScanner: CodeScanner): CodeScanner {
|
|
const { onCodeScanned, ...codeScannerOptions } = codeScanner
|
|
|
|
// Memoize the function once and use a ref on any identity changes
|
|
const ref = useRef(onCodeScanned)
|
|
ref.current = onCodeScanned
|
|
const callback = useCallback((codes: Code[]) => {
|
|
ref.current(codes)
|
|
}, [])
|
|
|
|
// CodeScanner needs to be memoized so it doesn't trigger a Camera Session re-build
|
|
return useMemo(
|
|
() => ({
|
|
...codeScannerOptions,
|
|
onCodeScanned: callback,
|
|
}),
|
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
[JSON.stringify(codeScannerOptions), callback],
|
|
)
|
|
}
|