import { useEffect, useRef, useState } from "react"; import {Box, ButtonBase, useTheme, Typography, SxProps, Theme} from "@mui/material"; import UploadIcon from "../../assets/icons/UploadIcon"; import { SnackbarProvider, enqueueSnackbar } from 'notistack'; import Resizer from "react-image-file-resizer"; import JSZip from "jszip" import saveAs from "file-saver" interface Props { text?: string; sx?: SxProps; heightImg: string; widthImg?: string } const imageFavicon = [ { maxWidth: 16, maxHeight: 16, compressFormat: "PNG", quality: 100, rotation: 0 }, { maxWidth: 32, maxHeight: 32, compressFormat: "PNG", quality: 100, rotation: 0 }, { maxWidth: 48, maxHeight: 48, compressFormat: "PNG", quality: 100, rotation: 0 }, { maxWidth: 76, maxHeight: 76, compressFormat: "PNG", quality: 100, rotation: 0 }, { maxWidth: 96, maxHeight: 96, compressFormat: "PNG", quality: 100, rotation: 0 }, { maxWidth: 120, maxHeight: 120, compressFormat: "PNG", quality: 100, rotation: 0 }, { maxWidth: 128, maxHeight: 128, compressFormat: "PNG", quality: 100, rotation: 0 }, { maxWidth: 144, maxHeight: 144, compressFormat: "PNG", quality: 100, rotation: 0 }, { maxWidth: 152, maxHeight: 152, compressFormat: "PNG", quality: 100, rotation: 0 }, { maxWidth: 167, maxHeight: 167, compressFormat: "PNG", quality: 100, rotation: 0 }, { maxWidth: 180, maxHeight: 180, compressFormat: "PNG", quality: 100, rotation: 0 }, { maxWidth: 192, maxHeight: 192, compressFormat: "PNG", quality: 100, rotation: 0 }, { maxWidth: 196, maxHeight: 196, compressFormat: "PNG", quality: 100, rotation: 0 }, { maxWidth: 228, maxHeight: 288, compressFormat: "PNG", quality: 100, rotation: 0 }, { maxWidth: 256, maxHeight: 256, compressFormat: "PNG", quality: 100, rotation: 0 }, { maxWidth: 300, maxHeight: 300, compressFormat: "PNG", quality: 100, rotation: 0 }, { maxWidth: 384, maxHeight: 384, compressFormat: "PNG", quality: 100, rotation: 0 }, { maxWidth: 512, maxHeight: 512, compressFormat: "PNG", quality: 100, rotation: 0 } ] export default ({text, sx, heightImg, widthImg}: Props) => { const theme = useTheme(); const [favList, setFavList] = useState([]) useEffect(() => { if (favList.length === 17) { console.log("сейчас я сработаю") // const zip = new JSZip();//создание зип архива // const idx = uri.indexOf('base64,') + 'base64,'.length; //обработка строки картинки // const content = uri.substring(idx); //обработка строки картинки // zip.file("fav.jpg", content, {base64: true}); //сохранение картинки в архив с именем "fav.jpg" // zip.generateAsync({type:"blob"}).then(function(content) { // скачивание архива // saveAs(content, "fav.zip"); // скачивание архива // }); // скачивание архива } }, [favList]) const callback = (uri:any) => { setFavList( old => [...old, uri]) }; const imgHC = (imgInp:any) => { setFavList([]) const [file] = imgInp.files if (file.size < 5242880) { setData(URL.createObjectURL(file)) } else {enqueueSnackbar('Размер картинки слишком велик')} imageFavicon.forEach(obj => { try { Resizer.imageFileResizer( [file][0], obj.maxWidth, obj.maxHeight, obj.compressFormat, obj.quality, obj.rotation, callback, ); } catch (err) { console.log(err); } }) } const [data, setData] = useState("") const [ready, setReady] = useState(false); const dragenterHC = () => { // console.log("onDragEnter") setReady(true) } const dragexitHC = () => { // console.log("onDragExit") setReady(false) } const dropHC = (event: any) => { event.preventDefault() // console.log("onDrop") setReady(false) const file = event.dataTransfer.files[0] console.log(event.dataTransfer.files[0]) if (file.size < 5242880) { setData(URL.createObjectURL(file)) } else {enqueueSnackbar('Размер картинки слишком велик')} // try { // Resizer.imageFileResizer( // file, // 50, // 50, // "JPEG", // 100, // 0, // callback, // ); // // } catch (err) { // console.log(err); // } // } const dragOverHC = (event: any) => { event.preventDefault() // console.log("onDragOver") } return ( imgHC(event.target)} hidden accept="image/*" multiple type="file" /> {text} {data ? : null } ) }