123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- 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
|