From 668c9f4841e7118b98bb31d8e68640689be99830 Mon Sep 17 00:00:00 2001 From: eug-vs Date: Sat, 22 Aug 2020 13:54:56 +0300 Subject: refactor!: simplify file operations --- src/containers/PollCreation/useS3Preupload.ts | 40 +++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 src/containers/PollCreation/useS3Preupload.ts (limited to 'src/containers/PollCreation/useS3Preupload.ts') diff --git a/src/containers/PollCreation/useS3Preupload.ts b/src/containers/PollCreation/useS3Preupload.ts new file mode 100644 index 0000000..ef3a408 --- /dev/null +++ b/src/containers/PollCreation/useS3Preupload.ts @@ -0,0 +1,40 @@ +import { useState, useCallback, useMemo } from 'react'; +import uploadFileToS3 from '../../utils/uploadFileToS3'; + + +interface Hook { + setValue: (value: File | string | undefined) => void; + isReady: boolean; + resolve: () => Promise; + progress: number; +} + +export default (): Hook => { + const [url, setUrl] = useState(); + const [file, setFile] = useState(); + const [progress, setProgress] = useState(0); + + const isReady = useMemo(() => Boolean(file || url), [file, url]); + + const setValue: Hook['setValue'] = useCallback(value => { + if (value instanceof File) { + setFile(value); + setUrl(undefined); + } else { + setUrl(value); + setFile(undefined); + } + }, [setUrl, setFile]); + + const resolve = useCallback(async (quality?: number): Promise => { + if (file) return uploadFileToS3(file, quality, setProgress); + return url || ''; + }, [file, url]); + + return { + setValue, + isReady, + resolve, + progress + }; +}; -- cgit v1.2.3 From 66e1dfd1b726aa465969d0b7d028db8b0dfa1d0e Mon Sep 17 00:00:00 2001 From: eug-vs Date: Sat, 22 Aug 2020 14:16:36 +0300 Subject: fix: resolve eslint errors --- src/containers/PollCreation/useS3Preupload.ts | 35 +++++++++------------------ 1 file changed, 12 insertions(+), 23 deletions(-) (limited to 'src/containers/PollCreation/useS3Preupload.ts') diff --git a/src/containers/PollCreation/useS3Preupload.ts b/src/containers/PollCreation/useS3Preupload.ts index ef3a408..0e2a8c4 100644 --- a/src/containers/PollCreation/useS3Preupload.ts +++ b/src/containers/PollCreation/useS3Preupload.ts @@ -1,39 +1,28 @@ -import { useState, useCallback, useMemo } from 'react'; +import { useState, useCallback } from 'react'; import uploadFileToS3 from '../../utils/uploadFileToS3'; - interface Hook { - setValue: (value: File | string | undefined) => void; - isReady: boolean; + file: File | string | undefined; + setFile: (value: File | string | undefined) => void; resolve: () => Promise; progress: number; } export default (): Hook => { - const [url, setUrl] = useState(); - const [file, setFile] = useState(); + const [file, setFile] = useState(); const [progress, setProgress] = useState(0); - const isReady = useMemo(() => Boolean(file || url), [file, url]); - - const setValue: Hook['setValue'] = useCallback(value => { - if (value instanceof File) { - setFile(value); - setUrl(undefined); - } else { - setUrl(value); - setFile(undefined); - } - }, [setUrl, setFile]); - const resolve = useCallback(async (quality?: number): Promise => { - if (file) return uploadFileToS3(file, quality, setProgress); - return url || ''; - }, [file, url]); + // Indicate start + setProgress(0.01); + + if (file instanceof File) return uploadFileToS3(file, quality, setProgress); + return file || ''; + }, [file]); return { - setValue, - isReady, + file, + setFile, resolve, progress }; -- cgit v1.2.3