import React from 'react'; import {NumberInput, TextInput} from './Input'; import OTPOutput, {HashAlgorithm} from './OTPOutput'; import Select from './Select'; function App() { const [secret, setSecret] = React.useState(''); const [step, setStep] = React.useState(30); const [offset, setOffset] = React.useState(0); const [digits, setDigits] = React.useState(6); const [algorithm, setAlgorithm] = React.useState('sha1'); const validStep = step > 0; const validDigits = digits > 0 && digits <= 10; const valid = validStep && validDigits; React.useEffect(() => { if (!validStep) return; const now = Date.now(); setOffset(Math.floor(now / (1000 * step))); }, [validStep, step]); React.useEffect(() => { if (!validStep) return; const now = Date.now(); const nextOffset = Math.floor(now / (1000 * step)) + 1; const nextUpdate = nextOffset * step * 1000; const timer = setTimeout(() => setOffset(nextOffset), nextUpdate - now); return () => clearTimeout(timer); }, [validStep, offset, step]); const onReset = React.useCallback(() => { setStep(30); setDigits(6); setAlgorithm('sha1'); }, []); return (