import styles from './InlineForm.module.scss' import { Icon } from '../../_shared/Icon' import { createSignal } from 'solid-js' import { clsx } from 'clsx' type Props = { onClose: () => void onClear?: () => void onSubmit: (value: string) => void validate?: (value: string) => string | Promise initialValue?: string showInput?: boolean placeholder: string autoFocus?: boolean } export const InlineForm = (props: Props) => { const [formValue, setFormValue] = createSignal(props.initialValue || '') const [formValueError, setFormValueError] = createSignal() const handleFormInput = (e) => { const value = e.currentTarget.value setFormValueError() setFormValue(value) } const handleSaveButtonClick = async () => { if (props.validate) { const errorMessage = await props.validate(formValue()) if (errorMessage) { setFormValueError(errorMessage) return } } props.onSubmit(formValue()) props.onClose() } const handleKeyDown = async (e) => { setFormValueError('') if (e.key === 'Enter') { e.preventDefault() await handleSaveButtonClick() } if (e.key === 'Escape' && props.onClear) { props.onClear() } } return (
{formValueError()}
) }