How about adding a 2-second restriction? This way, it would only allow assignment operations every 2 seconds.
import { useRef, useState } from "react"
import { TextInput } from "react-native"
interface UseBarcodeScanner {
onScan: (barcode: string) => Promise<void> | void
}
const useBarcodeScanner = ({ onScan }: UseBarcodeScanner) => {
const [barcode, setBarcode] = useState("")
const inputRef = useRef<TextInput>(null)
const lastScanTimeRef = useRef<number>(0)
const handleStringListener = (text: string) => {
const now = Date.now()
if (now - lastScanTimeRef.current < 2000) {
console.log("Barcode came so fast, it is ignored")
return
}
setBarcode(text)
}
const handleEndEditing = () => {
if (barcode.length > 0) {
lastScanTimeRef.current = Date.now()
void onScan(barcode)
setBarcode("")
inputRef.current?.focus()
}
}
return {
inputRef,
barcode,
inputProps: {
value: barcode,
onChangeText: handleStringListener,
onEndEditing: handleEndEditing,
onSubmitEditing: handleEndEditing,
showSoftInputOnFocus: false,
blurOnSubmit: false,
},
}
}
export default useBarcodeScanner