/* eslint-disable react/display-name */ import React, { PropsWithChildren, useState } from 'react' import { Button, UploadCallbacks, Upload, DragUpload, UploadData, getUploadValue, isUploadRealFile } from 'react-icecream' import { AddThinIcon, UploadIcon } from 'react-icecream/icons' import cns from 'classnames' import diff from 'lodash/difference' import './demo.less' export default () => { const [files, setFiles] = useState(getUploadValue(['2222222222222222222222222222222222223333333', '3'])) const [dragFiles, setDragFiles] = useState([]) const doUpload = ( _: File, callbacks: UploadCallbacks ) => { const mock = { percent: 0 } const interval = setInterval(() => { mock.percent += 1 if (mock.percent === 100) { callbacks.onComplete() clearInterval(interval) } else { callbacks.onProgress({ percent: mock.percent }) } }, 100) return () => { if (interval) { clearInterval(interval) mock.percent = 0 } } } const onChange = (data: UploadData[]) => { console.log('files', data) if (beforeUpload(dragFiles, data)) { setDragFiles(data) } } const onSingleChange = (data: UploadData[]) => { console.log('single files', data) if (beforeUpload(files, data)) { setFiles(data) } } return (
} />
) } const DragContent = ({ title, dragStatus = '', disabled = false }: { title: string, dragStatus?: string, disabled?: boolean}) => (
{dragStatus !== 'dragover' || disabled ?
{title},或拖拽文件到此处上传
:
释放文件并开始上传
}
视频大小控制在100Mb以内
) function Line({ children }: PropsWithChildren<{}>) { return
{children}
} function beforeUpload(before: UploadData[], after: UploadData[]): boolean { const exisedIdList = before.map(item => item.id) const newIdList = after.map(item => item.id) const addedIdList = diff(newIdList, exisedIdList) const addedList = after.filter(item => addedIdList.includes(item.id)) return addedList.filter(isUploadRealFile).every(data => data.file.size <= 100 * 1024 * 1024) }