code_input.tsx (812B)
1 import { useComputed, useSignal } from "@preact/signals"; 2 import { CODE_REGEX } from "#core/domain/constants.ts"; 3 4 export default function CodeInput(props: { error: boolean }) { 5 const error = useSignal(props.error); 6 const value = useSignal(""); 7 8 const invalid = useComputed(() => { 9 if (error.value) return "true"; 10 if (value.value === "") return undefined; 11 return CODE_REGEX.test(value.value) ? "false" : "true"; 12 }); 13 14 return ( 15 <label> 16 Verification Code: 17 <input 18 type="text" 19 name="code" 20 value={value} 21 aria-invalid={invalid} 22 onInput={(e) => { 23 error.value = false; 24 value.value = e.currentTarget.value; 25 }} 26 /> 27 <small>Enter the code that has been sent to your email address</small> 28 </label> 29 ); 30 }