| import type { FC } from 'react' | |
| import { useState } from 'react' | |
| import { useTranslation } from 'react-i18next' | |
| import Button from '@/app/components/base/button' | |
| import type { ImageFile } from '@/types/app' | |
| import { TransferMethod } from '@/types/app' | |
| type ImageLinkInputProps = { | |
| onUpload: (imageFile: ImageFile) => void | |
| disabled?: boolean | |
| } | |
| const regex = /^(https?|ftp):\/\// | |
| const ImageLinkInput: FC<ImageLinkInputProps> = ({ | |
| onUpload, | |
| disabled, | |
| }) => { | |
| const { t } = useTranslation() | |
| const [imageLink, setImageLink] = useState('') | |
| const handleClick = () => { | |
| if (disabled) | |
| return | |
| const imageFile = { | |
| type: TransferMethod.remote_url, | |
| _id: `${Date.now()}`, | |
| fileId: '', | |
| progress: regex.test(imageLink) ? 0 : -1, | |
| url: imageLink, | |
| } | |
| onUpload(imageFile) | |
| } | |
| return ( | |
| <div className='flex items-center pl-1.5 pr-1 h-8 border border-gray-200 bg-white shadow-xs rounded-lg'> | |
| <input | |
| type="text" | |
| className='grow mr-0.5 px-1 h-[18px] text-[13px] outline-none appearance-none' | |
| value={imageLink} | |
| onChange={e => setImageLink(e.target.value)} | |
| placeholder={t('common.imageUploader.pasteImageLinkInputPlaceholder') || ''} | |
| /> | |
| <Button | |
| variant='primary' | |
| size='small' | |
| disabled={!imageLink || disabled} | |
| onClick={handleClick} | |
| > | |
| {t('common.operation.ok')} | |
| </Button> | |
| </div> | |
| ) | |
| } | |
| export default ImageLinkInput | |