import React, { useCallback, useRef, useState } from 'react'; import { showToasts, t, useAsyncFn } from 'tailchat-shared'; import { useGlobalKeyDown } from '../../hooks/useGlobalKeyDown'; import { isEnterHotkey, isEscHotkey } from '../../utils/hot-key'; import { Switch, Button } from 'antd'; import { ModalWrapper } from '@/components/Modal'; interface ImageSize { width: number; height: number; } interface ImageUploadPreviewerProps { imageUrl: string; onConfirm: (imageUploadInfo: { size: ImageSize; uploadOriginImage: boolean; }) => Promise; onCancel: () => void; } export const ImageUploadPreviewer: React.FC = React.memo((props) => { const { imageUrl } = props; const imageSizeRef = useRef({ width: 0, height: 0 }); const [uploadOriginImage, setUploadOriginImage] = useState(false); const [{ loading }, handleConfirm] = useAsyncFn(async () => { if ( imageSizeRef.current.width === 0 || imageSizeRef.current.height === 0 ) { showToasts(t('操作过于频繁'), 'warning'); return; } if (typeof props.onConfirm === 'function') { await Promise.resolve( props.onConfirm({ size: imageSizeRef.current, uploadOriginImage, }) ); } }, [props.onConfirm, uploadOriginImage]); useGlobalKeyDown( (e) => { if (isEnterHotkey(e)) { e.stopPropagation(); e.preventDefault(); handleConfirm(); } else if (isEscHotkey(e)) { e.stopPropagation(); props.onCancel(); } }, { capture: true, } ); const handleLoad = useCallback( (e: React.SyntheticEvent) => { const target = e.currentTarget; imageSizeRef.current = { width: target.naturalWidth, height: target.naturalHeight, }; }, [] ); return (
{t('上传图片到会话')}
{t('请勿上传违反当地法律法规的图片')}
setUploadOriginImage(checked)} /> {t('上传原图')}
); }); ImageUploadPreviewer.displayName = 'ImageUploadPreviewer';