56 lines
1.3 KiB
TypeScript
56 lines
1.3 KiB
TypeScript
import React from 'react'
|
|
import { FieldValues, UseFormRegister, Validate } from 'react-hook-form'
|
|
|
|
import classes from './index.module.scss'
|
|
|
|
type Props = {
|
|
name: string
|
|
label: string
|
|
register: UseFormRegister<FieldValues & any>
|
|
required?: boolean
|
|
error: any
|
|
type?: 'text' | 'number' | 'password' | 'email'
|
|
validate?: (value: string) => boolean | string
|
|
}
|
|
|
|
export const Input: React.FC<Props> = ({
|
|
name,
|
|
label,
|
|
required,
|
|
register,
|
|
error,
|
|
type = 'text',
|
|
validate,
|
|
}) => {
|
|
return (
|
|
<div className={classes.inputWrap}>
|
|
<label htmlFor="name" className={classes.label}>
|
|
{`${label} ${required ? '*' : ''}`}
|
|
</label>
|
|
<input
|
|
className={[classes.input, error && classes.error].filter(Boolean).join(' ')}
|
|
{...{ type }}
|
|
{...register(name, {
|
|
required,
|
|
validate,
|
|
...(type === 'email'
|
|
? {
|
|
pattern: {
|
|
value: /\S+@\S+\.\S+/,
|
|
message: 'Please enter a valid email',
|
|
},
|
|
}
|
|
: {}),
|
|
})}
|
|
/>
|
|
{error && (
|
|
<div className={classes.errorMessage}>
|
|
{!error?.message && error?.type === 'required'
|
|
? 'This field is required'
|
|
: error?.message}
|
|
</div>
|
|
)}
|
|
</div>
|
|
)
|
|
}
|