import React, { InputHTMLAttributes, ReactNode } from 'react'; import { FieldPathValue } from 'react-hook-form'; import { FieldValues } from 'react-hook-form/dist/types/fields'; import { FieldPath } from 'react-hook-form/dist/types/path'; import { FormComponent } from '../../models/form-component'; interface FormInputProps extends InputHTMLAttributes, FormComponent{ id: string, label?: string, tooltip?: string, icon?: ReactNode, addOn?: ReactNode, addOnClassName?: string, } /** * This component is a template for an input component to use within React Hook Form */ export const FormInput = ({ id, register, label, tooltip, defaultValue, icon, className, rules, readOnly, disabled, type, addOn, addOnClassName, placeholder, error, step }: FormInputProps) => { // Compose classnames from props const classNames = ` form-input ${className || ''} ${error && error[id] ? 'is-incorrect' : ''} ${rules && rules.required ? 'is-required' : ''} ${readOnly ? 'is-readOnly' : ''} ${disabled ? 'is-disabled' : ''}`; return ( {label && {label} {/* TODO: Create tooltip component */} {tooltip && {tooltip}} } {icon && {icon}} , { ...rules, valueAsNumber: type === 'number', value: defaultValue as FieldPathValue> })} type={type} step={step} disabled={disabled} readOnly={readOnly} placeholder={placeholder} /> {addOn && {addOn}} {(error && error[id]) && {error[id].message} } ); };
{label}