Advertisement
Guest User

Untitled

a guest
Aug 26th, 2019
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.85 KB | None | 0 0
  1. import React, { useState } from 'react';
  2. import Dropzone from 'react-dropzone';
  3. import ImageGallery from 'react-image-gallery';
  4. import { ReactImageGalleryItem } from 'react-image-gallery';
  5. import '../node_modules/react-image-gallery/styles/scss/image-gallery.scss';
  6. import styles from './App.module.scss';
  7.  
  8. const convertType = (type: string | ArrayBuffer | null):string => {
  9. if (typeof type === 'string') {
  10. return type;
  11. } else {
  12. return '';
  13. }
  14. };
  15.  
  16. const App: React.FC<{}> = () => {
  17. const [imageSrcs, setImageSrcs] = useState([] as ReactImageGalleryItem[]);
  18.  
  19. const handleOnDrop = <T extends File>(acceptedFiles: T[]) => {
  20. if (acceptedFiles && acceptedFiles.length > 0) {
  21. for (let i = 0; i < acceptedFiles.length; i++) {
  22. const reader = new FileReader();
  23. reader.onload = () => {
  24. imageSrcs.push({
  25. original: convertType(reader.result),
  26. thumbnail: convertType(reader.result),
  27. originalClass: 'original-image'
  28. });
  29. setImageSrcs([...imageSrcs]);
  30. };
  31. reader.readAsDataURL(acceptedFiles[i]);
  32. }
  33. }
  34. };
  35.  
  36. imageSrcs.forEach((item, i) => item.description = `${i+1} из ${imageSrcs.length}`);
  37.  
  38. return (
  39. <div className={styles['App']}>
  40. <Dropzone onDrop={handleOnDrop}>
  41. {({ getRootProps, getInputProps }) => (
  42. <section>
  43. <div className={styles['files-dropzone']} {...getRootProps()}>
  44. <input {...getInputProps()} />
  45. <p className={styles['files-drop']}>
  46. Перетащите файлы в эту область<br />или<br /><span className={styles['span-blue']}>Выберите на компьютере</span>
  47. </p>
  48. </div>
  49. </section>
  50. )}
  51. </Dropzone>
  52. {imageSrcs.length > 0 && (
  53. <ImageGallery
  54. items={imageSrcs}
  55. useBrowserFullscreen={false}
  56. />
  57. )}
  58. </div>
  59. );
  60. }
  61.  
  62. export default App;
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement