From a424e868ab7e7038b36803979fade4b755957d5d Mon Sep 17 00:00:00 2001 From: Yath Seanghay Date: Thu, 7 Jan 2021 19:08:13 +0700 Subject: [PATCH] fix click to upload --- package-lock.json | 5 ++ package.json | 1 + pages/_document.js | 1 - pages/index.js | 131 +++++++++++++++++++++++++++------------------ 4 files changed, 86 insertions(+), 52 deletions(-) diff --git a/package-lock.json b/package-lock.json index 06ad7b8..e69ae8a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3820,6 +3820,11 @@ "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.8.3.tgz", "integrity": "sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg==" }, + "react-sage": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/react-sage/-/react-sage-0.1.5.tgz", + "integrity": "sha512-a/L5ILib9QitvtCY4BwFnMwaelgDfg7Hg8lNWaYlqxVHtbrvc6A/JGPwcUX/6/ye9LZ4Vo7bCRFKamdMKEpvcA==" + }, "react-svg": { "version": "11.2.1", "resolved": "https://registry.npmjs.org/react-svg/-/react-svg-11.2.1.tgz", diff --git a/package.json b/package.json index d58c1fc..27b41b5 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "react": "17.0.1", "react-dom": "17.0.1", "react-inlinesvg": "^2.2.2", + "react-sage": "^0.1.5", "react-svg": "^11.2.1", "vector-drawable-svg": "^1.0.2" } diff --git a/pages/_document.js b/pages/_document.js index b6447f8..9e37ead 100644 --- a/pages/_document.js +++ b/pages/_document.js @@ -12,7 +12,6 @@ export default class MyDocument extends Document { - VectorDrawable to SVG diff --git a/pages/index.js b/pages/index.js index 9819b93..53e4159 100644 --- a/pages/index.js +++ b/pages/index.js @@ -1,7 +1,9 @@ import {ReactSVG} from "react-svg"; -import {useState} from "react"; +import {useState, useEffect} from "react"; import {transform} from 'vector-drawable-svg'; import SVG from 'react-inlinesvg'; +import { useFilePicker } from 'react-sage'; +import Head from "next/head"; const STATE_NONE = -1 @@ -52,14 +54,15 @@ async function readFileContent(file) { export default function Home() { + const { files, onClick: onDropzoneClick, errors, HiddenFileInput } = useFilePicker({ + maxFileSize: 1, + }) + const [dragState, setDragState] = useState(STATE_NONE) const [isEnabled, setEnabled] = useState(false); const [vectorDrawableFile, setVectorDrawableFile] = useState() const [transformedSvg, setTransformedSvg] = useState() - function handleFileUpload() { - setEnabled(!isEnabled) - } function dragEnter(e) { e.stopPropagation(); @@ -73,6 +76,19 @@ export default function Home() { setDragState(STATE_DRAG_LEAVE) } + + async function proceedFile(file) { + const xmlContent = await readFileContent(file); + const svgContent = transformXmlOrNull(xmlContent); + if (!svgContent) { + return; + } + + setTransformedSvg(svgContent); + setVectorDrawableFile(file); + setDragState(STATE_DROP); + } + async function fileDrop(e) { e.preventDefault(); e.stopPropagation(); @@ -81,15 +97,7 @@ export default function Home() { if (files.length > 0) { const file = files[0] if (isValidFileType(file.type)) { - const xmlContent = await readFileContent(file); - const svgContent = transformXmlOrNull(xmlContent); - if (!svgContent) { - return; - } - - setTransformedSvg(svgContent); - setVectorDrawableFile(file); - setDragState(STATE_DROP); + await proceedFile(file); return; } } @@ -103,7 +111,8 @@ export default function Home() { e.dataTransfer.dropEffect = 'copy'; } - function clearUpload() { + function clearUpload(e) { + e.stopPropagation(); setDragState(STATE_NONE) setVectorDrawableFile(null); setTransformedSvg(null); @@ -121,48 +130,68 @@ export default function Home() { downloadBlob(filename, transformedSvg); } + useEffect(() => { + const getDataUrls = async () => { + if (files.length <= 0) { + return; + } + const file = files[0]; + if (isValidFileType(file.type)) { + await proceedFile(file); + } + } + getDataUrls() + }, [files]) + return ( -
-
-

VectorDrawable to SVG

-

Drop a valid vector drawable file here.

-
-
- -
-
-
- -
-
- -
+ <> + + VectorDrawable to SVG + +
+ +
+

VectorDrawable to SVG

+

Drop a valid vector drawable file here.

+
-

{vectorDrawableFile?.name}

+ className={"vd-dropzone " + dropzoneClassOfState(dragState)}> +
+ +
+
+
+ +
+
+ +
+ +
+

{vectorDrawableFile?.name}

+
+ + + +
- - - -
-
+ ) }