Files
payloadcms/examples/auth/next-app/app/_components/Input/index.tsx
2023-07-21 14:13:18 -04:00

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>
)
}