aboutsummaryrefslogtreecommitdiff
path: root/src/containers/PollCreation/useS3Preupload.ts
diff options
context:
space:
mode:
authoreug-vs <eug-vs@keemail.me>2020-08-22 13:54:56 +0300
committereug-vs <eug-vs@keemail.me>2020-08-22 13:54:56 +0300
commit668c9f4841e7118b98bb31d8e68640689be99830 (patch)
tree692c66b7fee252bba4466104ebd4c8fff02fcf19 /src/containers/PollCreation/useS3Preupload.ts
parentfdf826bf38b967d2f4346e9ee5950e157f0f0beb (diff)
downloadwhich-ui-668c9f4841e7118b98bb31d8e68640689be99830.tar.gz
refactor!: simplify file operations
Diffstat (limited to 'src/containers/PollCreation/useS3Preupload.ts')
-rw-r--r--src/containers/PollCreation/useS3Preupload.ts40
1 files changed, 40 insertions, 0 deletions
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<string>;
+ progress: number;
+}
+
+export default (): Hook => {
+ const [url, setUrl] = useState<string>();
+ const [file, setFile] = useState<File>();
+ const [progress, setProgress] = useState<number>(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<string> => {
+ if (file) return uploadFileToS3(file, quality, setProgress);
+ return url || '';
+ }, [file, url]);
+
+ return {
+ setValue,
+ isReady,
+ resolve,
+ progress
+ };
+};