DropZone.js 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152
  1. import { useDropzone } from 'react-dropzone'
  2. import React, { useEffect } from 'react'
  3. import { Button,Image } from 'antd'
  4. import { UploadOutlined } from '@ant-design/icons'
  5. import { sortableContainer, sortableElement } from 'react-sortable-hoc'
  6. export function Basic({ onLoad }) {
  7. const { acceptedFiles, getRootProps, getInputProps } = useDropzone()
  8. const files = acceptedFiles.map((file) => (
  9. <li key={file.path}>
  10. {file.path} - {file.size} bytes
  11. </li>
  12. ))
  13. // console.log('acceptedFiles',acceptedFiles)
  14. useEffect(() => {
  15. if (acceptedFiles) onLoad(acceptedFiles)
  16. }, [acceptedFiles])
  17. return (
  18. <section className="container">
  19. <div {...getRootProps({ className: 'Dropzone' })}>
  20. <input {...getInputProps()} />
  21. <Button type="default" size="large" icon={<UploadOutlined />}>
  22. Drag 'n' drop some files here, or click to select files
  23. </Button>
  24. </div>
  25. </section>
  26. )
  27. }
  28. export function ImageDemo({ _id, index, url }) {
  29. return <SortableItem url={url} key={`item-${_id}`} index={index} />
  30. }
  31. export const SortableItem = sortableElement(({ url }) => {
  32. return (
  33. <Image
  34. style={{
  35. margin: '10px',
  36. maxWidth: '200px',
  37. boxShadow: '0 5px 10px rgba(0,0,0,0.25), 0 10px 10px rgba(0,0,0,0.22)',
  38. maxHeight: '200px',
  39. }}
  40. src={'/' + url}
  41. />
  42. )
  43. })
  44. export const SortableContainer = sortableContainer(({ children }) => {
  45. return (
  46. <>
  47. <ul>{children}</ul>
  48. </>
  49. )
  50. })