phone_number_input.tsx (808B)
1 import { useComputed, useSignal } from "@preact/signals"; 2 3 export default function PhoneNumberInput( 4 props: { error: boolean; conflict: boolean }, 5 ) { 6 const error = useSignal(props.error); 7 const value = useSignal(""); 8 9 const invalid = useComputed(() => { 10 if (error.value) return true; 11 if (value.value === "") return undefined; 12 return false; 13 }); 14 15 return ( 16 <label> 17 Phone number: 18 <input 19 type="tel" 20 name="phoneNumber" 21 value={value} 22 aria-invalid={invalid} 23 onInput={(e) => { 24 error.value = false; 25 value.value = e.currentTarget.value; 26 }} 27 /> 28 {useComputed(() => 29 props.conflict && invalid.value && ( 30 <small>Phone number already used!</small> 31 ) 32 )} 33 </label> 34 ); 35 }