import { blobUrlToFile } from '@/utils/file-helper'; import clsx from 'clsx'; import React, { PropsWithChildren, useState } from 'react'; import { uploadFile, UploadFileResult, UploadFileUsage, useAsyncRequest, } from 'tailchat-shared'; import { ImagePicker } from './ImagePicker'; interface ImageUploaderProps extends PropsWithChildren { circle?: boolean; aspect?: number; className?: string; usage?: UploadFileUsage; onUploadSuccess: (fileInfo: UploadFileResult) => void; } export const ImageUploader: React.FC = React.memo( (props) => { const aspect = props.aspect ?? 1; const [uploadProgress, setUploadProgress] = useState(0); // 0 - 100 const [{ loading }, handlePickImage] = useAsyncRequest( async (blobUrl: string) => { const file = await blobUrlToFile(blobUrl); const fileInfo = await uploadFile(file, { usage: props.usage, onProgress(percent) { const uploadProgress = Number((percent * 100).toFixed()); console.log(`进度:${uploadProgress}`); setUploadProgress(uploadProgress); }, }); console.log('上传成功', fileInfo); props.onUploadSuccess(fileInfo); }, [] ); return ( {loading && (
)} {props.children} ); } ); ImageUploader.displayName = 'ImageUploader'; export const AvatarUploader: React.FC = React.memo( (props) => { return ; } ); AvatarUploader.displayName = 'AvatarUploader';