sozsoft-platform/ui/src/components/shared/BarcodeScanner/BarcodeScannerHost.tsx

34 lines
895 B
TypeScript
Raw Normal View History

2026-09-21 15:01:40 +00:00
import { useEffect, useState } from 'react'
import BarcodeScannerDialog from './BarcodeScannerDialog'
import { registerBarcodeScanner } from './scanBarcode'
/**
* `scanBarcode()` çağrılarını karşılayan tekil diyalog. Uygulama kökünde bir
* kez mount edilir; React ağacı dışından açılabilmesinin tek yolu budur.
*/
const BarcodeScannerHost = () => {
const [resolve, setResolve] = useState<((code: string | null) => void) | null>(null)
useEffect(() => {
registerBarcodeScanner((next) => setResolve(() => next))
return () => registerBarcodeScanner(undefined)
}, [])
const finish = (code: string | null) => {
resolve?.(code)
setResolve(null)
}
if (!resolve) return null
return (
<BarcodeScannerDialog
open
onDetect={(code) => finish(code)}
onDialogClose={() => finish(null)}
/>
)
}
export default BarcodeScannerHost