import React, { useState } from 'react'; import { Button } from 'components/shared/Button'; import { ArrowRightCircleFilledIcon, LoaderIcon, } from 'components/shared/CustomIcon'; import { WavyBorder } from 'components/shared/WavyBorder'; import { VerifyCodeInput } from 'components/shared/VerifyCodeInput'; import { verifyAccessCode } from 'utils/accessCode'; type AccessMethod = 'accesscode' | 'passkey'; type Err = { type: AccessMethod; message: string }; type AccessCodeProps = { onCorrectAccessCode: () => void; }; export const AccessCode: React.FC = ({ onCorrectAccessCode, }) => { const [accessCode, setAccessCode] = useState(' '); const [error, setError] = useState(); const [accessMethod, setAccessMethod] = useState(false); async function validateAccessCode() { setAccessMethod('accesscode'); try { const isValidAccessCode = await verifyAccessCode(accessCode); // add a pause for ux await new Promise((resolve) => setTimeout(resolve, 250)); if (isValidAccessCode) { localStorage.setItem('accessCode', accessCode); onCorrectAccessCode(); } else { setError({ type: 'accesscode', message: 'Invalid access code', }); } } catch (err: any) { setError({ type: 'accesscode', message: err.message }); } } const loading = accessMethod; const isValidAccessCodeLength = accessCode.trim().length === 5; return (
Access Code
{error && error.type === 'accesscode' && (
Error: {error.message}.{' '} Try again?
)}
); };