import { h, VNode } from 'preact'; import { useLayoutEffect, useRef, useState } from 'preact/hooks'; export interface TextInputProps { label: string; grabFocus?: boolean; error?: string; placeholder?: string; tooltip?: string; onConfirm?: () => void; bind: [string, (x: string) => void]; } export function EmailInput(props: TextInputProps): VNode { const inputRef = useRef(null); useLayoutEffect(() => { if (props.grabFocus) inputRef.current?.focus(); }, [props.grabFocus]); const value = props.bind[0]; const [dirty, setDirty] = useState(false); const showError = dirty && props.error; return (
{ if (e.key === 'Enter' && props.onConfirm) props.onConfirm() }} onInput={(e) => { setDirty(true); props.bind[1]((e.target as HTMLInputElement).value); }} ref={inputRef} style={{ display: 'block' }} />
{showError &&

{props.error}

}
); }