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