| import type { ChangeEvent } from 'react' | |
| import { | |
| ValidatedErrorIcon, | |
| ValidatedErrorMessage, | |
| ValidatedSuccessIcon, | |
| ValidatingTip, | |
| } from './ValidateStatus' | |
| import { ValidatedStatus } from './declarations' | |
| import type { ValidatedStatusState } from './declarations' | |
| type KeyInputProps = { | |
| value?: string | |
| name: string | |
| placeholder: string | |
| className?: string | |
| onChange: (v: string) => void | |
| onFocus?: () => void | |
| validating: boolean | |
| validatedStatusState: ValidatedStatusState | |
| } | |
| const KeyInput = ({ | |
| value, | |
| name, | |
| placeholder, | |
| className, | |
| onChange, | |
| onFocus, | |
| validating, | |
| validatedStatusState, | |
| }: KeyInputProps) => { | |
| const handleChange = (e: ChangeEvent<HTMLInputElement>) => { | |
| const inputValue = e.target.value | |
| onChange(inputValue) | |
| } | |
| const getValidatedIcon = () => { | |
| if (validatedStatusState.status === ValidatedStatus.Error || validatedStatusState.status === ValidatedStatus.Exceed) | |
| return <ValidatedErrorIcon /> | |
| if (validatedStatusState.status === ValidatedStatus.Success) | |
| return <ValidatedSuccessIcon /> | |
| } | |
| const getValidatedTip = () => { | |
| if (validating) | |
| return <ValidatingTip /> | |
| if (validatedStatusState.status === ValidatedStatus.Error) | |
| return <ValidatedErrorMessage errorMessage={validatedStatusState.message ?? ''} /> | |
| } | |
| return ( | |
| <div className={className}> | |
| <div className="mb-2 text-[13px] font-medium text-gray-800">{name}</div> | |
| <div className=' | |
| flex items-center px-3 bg-white rounded-lg | |
| shadow-xs | |
| '> | |
| <input | |
| className=' | |
| w-full py-[9px] mr-2 | |
| text-xs font-medium text-gray-700 leading-[18px] | |
| appearance-none outline-none bg-transparent | |
| ' | |
| value={value} | |
| placeholder={placeholder} | |
| onChange={handleChange} | |
| onFocus={onFocus} | |
| /> | |
| {getValidatedIcon()} | |
| </div> | |
| {getValidatedTip()} | |
| </div> | |
| ) | |
| } | |
| export default KeyInput | |