Skip to content

Commit 22d0b96

Browse files
authored
feat: allow user to delete photo before upload (#33)
1 parent b6e370e commit 22d0b96

File tree

3 files changed

+53
-4
lines changed

3 files changed

+53
-4
lines changed

package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
"start": "next start",
99
"lint": "next lint",
1010
"postinstall": "prisma generate",
11-
"prisma:migrate:dev": "prisma migrate dev",
11+
"prisma:migrate:dev": "dotenv -e .env.local prisma migrate dev",
1212
"vercel-build": "prisma generate && prisma migrate deploy && next build"
1313
},
1414
"dependencies": {
@@ -59,6 +59,7 @@
5959
},
6060
"devDependencies": {
6161
"@types/sharp": "^0.31.0",
62+
"dotenv-cli": "^6.0.0",
6263
"prisma": "^4.7.1"
6364
}
6465
}

src/components/dashboard/Uploader.tsx

+30-2
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import { useS3Upload } from "next-s3-upload";
2323
import { useState } from "react";
2424
import { useDropzone } from "react-dropzone";
2525
import { MdCheckCircle, MdCloud } from "react-icons/md";
26+
import { IoIosClose } from "react-icons/io";
2627
import { useMutation } from "react-query";
2728
import AvatarsPlaceholder from "../home/AvatarsPlaceholder";
2829
import { CheckedListItem } from "../home/Pricing";
@@ -84,6 +85,17 @@ const Uploader = ({ handleOnAdd }: { handleOnAdd: () => void }) => {
8485
});
8586

8687
const handleUpload = async () => {
88+
if (files.length < 5) {
89+
toast({
90+
title: "You need to upload at least 5 photos",
91+
duration: 3000,
92+
isClosable: true,
93+
position: "top-right",
94+
status: "error",
95+
});
96+
return;
97+
}
98+
8799
const filesToUpload = Array.from(files);
88100
setUploadState("uploading");
89101

@@ -197,14 +209,28 @@ const Uploader = ({ handleOnAdd }: { handleOnAdd: () => void }) => {
197209
key={file.name}
198210
>
199211
<Center top={-2} right={-2} position="absolute">
200-
{uploadState == "uploading" && !urls[index] && (
212+
{uploadState === "uploading" && !urls[index] && (
201213
<Spinner
202214
size="lg"
203215
thickness="8px"
204216
speed="1s"
205217
color="brand.500"
206218
/>
207219
)}
220+
221+
{uploadState !== "uploading" && !urls[index] && (
222+
<Icon
223+
cursor="pointer"
224+
onClick={() => {
225+
setFiles(files.filter((_, i) => i !== index));
226+
}}
227+
borderRadius="full"
228+
backgroundColor="brand.500"
229+
as={IoIosClose}
230+
fontSize="2rem"
231+
/>
232+
)}
233+
208234
{urls[index] && (
209235
<Icon
210236
borderRadius="full"
@@ -241,7 +267,9 @@ const Uploader = ({ handleOnAdd }: { handleOnAdd: () => void }) => {
241267
onClick={handleUpload}
242268
variant="brand"
243269
>
244-
Upload {files.length} image{files.length > 1 && "s"}
270+
{files.length < 5
271+
? "Upload (min 5 photos)"
272+
: `Upload ${files.length} photo${files.length > 1 && "s"}`}
245273
</Button>
246274
</Box>
247275
)}

yarn.lock

+21-1
Original file line numberDiff line numberDiff line change
@@ -2843,6 +2843,26 @@ doctrine@^3.0.0:
28432843
dependencies:
28442844
esutils "^2.0.2"
28452845

2846+
dotenv-cli@^6.0.0:
2847+
version "6.0.0"
2848+
resolved "https://registry.yarnpkg.com/dotenv-cli/-/dotenv-cli-6.0.0.tgz#8a30cbc59d0a8aaa166b2fee0a9a55e23a1223ab"
2849+
integrity sha512-qXlCOi3UMDhCWFKe0yq5sg3X+pJAz+RQDiFN38AMSbUrnY3uZshSfDJUAge951OS7J9gwLZGfsBlWRSOYz/TRg==
2850+
dependencies:
2851+
cross-spawn "^7.0.3"
2852+
dotenv "^16.0.0"
2853+
dotenv-expand "^8.0.1"
2854+
minimist "^1.2.5"
2855+
2856+
dotenv-expand@^8.0.1:
2857+
version "8.0.3"
2858+
resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-8.0.3.tgz#29016757455bcc748469c83a19b36aaf2b83dd6e"
2859+
integrity sha512-SErOMvge0ZUyWd5B0NXMQlDkN+8r+HhVUsxgOO7IoPDOdDRD2JjExpN6y3KnFR66jsJMwSn1pqIivhU5rcJiNg==
2860+
2861+
dotenv@^16.0.0:
2862+
version "16.0.3"
2863+
resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.0.3.tgz#115aec42bac5053db3c456db30cc243a5a836a07"
2864+
integrity sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==
2865+
28462866
emoji-regex@^9.2.2:
28472867
version "9.2.2"
28482868
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
@@ -3905,7 +3925,7 @@ minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2:
39053925
dependencies:
39063926
brace-expansion "^1.1.7"
39073927

3908-
minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.6:
3928+
minimist@^1.2.0, minimist@^1.2.3, minimist@^1.2.5, minimist@^1.2.6:
39093929
version "1.2.7"
39103930
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.7.tgz#daa1c4d91f507390437c6a8bc01078e7000c4d18"
39113931
integrity sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==

0 commit comments

Comments
 (0)