File tree Expand file tree Collapse file tree 2 files changed +39
-28
lines changed
src/components/account/profile Expand file tree Collapse file tree 2 files changed +39
-28
lines changed Original file line number Diff line number Diff line change @@ -4,6 +4,8 @@ import { resizeImage } from '@lib/utils';
44import { useCallback , useRef } from 'react' ;
55import toast from 'react-hot-toast' ;
66
7+ const ALLOWED_IMAGE_EXTENSIONS = [ '.jpg' , '.jpeg' , '.png' ] ;
8+
79export default function ImageUpload ( {
810 onSuccessfulUpload,
911 setImageLoading,
@@ -23,6 +25,17 @@ export default function ImageUpload({
2325 return ;
2426 }
2527
28+ // Check if file extension is allowed
29+ const fileName = file . name . toLowerCase ( ) ;
30+ const fileExtension = fileName . substring ( fileName . lastIndexOf ( '.' ) ) ;
31+
32+ if ( ! ALLOWED_IMAGE_EXTENSIONS . includes ( fileExtension ) ) {
33+ toast . error ( 'Only .jpg, .jpeg, and .png images are allowed.' ) ;
34+ setImageLoading ( false ) ;
35+ event . target . value = '' ;
36+ return ;
37+ }
38+
2639 if ( file . size > 50_000 ) {
2740 const resizedBlob = await resizeImage ( file ) ;
2841 console . log ( 'Resized size (KB):' , resizedBlob . size / 1024 ) ;
@@ -59,7 +72,7 @@ export default function ImageUpload({
5972 ref = { inputRef }
6073 id = "image-input"
6174 type = "file"
62- accept = "image/* "
75+ accept = ".jpg,.jpeg,.png "
6376 onChange = { handleFileChange }
6477 className = "hidden"
6578 />
Original file line number Diff line number Diff line change @@ -131,33 +131,18 @@ export default function PublicProfile() {
131131 />
132132 </ div >
133133
134- { isEditing ? (
135- < div className = "col items-center gap-2" >
136- < ImageUpload
137- onSuccessfulUpload = { ( ) => {
138- // Bust cached image and re-attempt load
139- setImageError ( false ) ;
140- setImageRefreshToken ( Date . now ( ) ) ;
141- } }
142- setImageLoading = { setImageLoading }
143- />
144-
145- < div className = "text-sm text-slate-500" > The maximum file size allowed is 500 KB.</ div >
146- </ div >
147- ) : (
148- < div >
149- < Button
150- className = "h-9 border-2 border-slate-200 bg-white data-[hover=true]:opacity-65!"
151- color = "default"
152- size = "sm"
153- variant = "solid"
154- onPress = { ( ) => setEditing ( true ) }
155- isDisabled = { isLoading }
156- >
157- < div className = "text-sm" > Edit profile</ div >
158- </ Button >
159- </ div >
160- ) }
134+ < div className = "col items-center gap-2" >
135+ < ImageUpload
136+ onSuccessfulUpload = { ( ) => {
137+ // Bust cached image and re-attempt load
138+ setImageError ( false ) ;
139+ setImageRefreshToken ( Date . now ( ) ) ;
140+ } }
141+ setImageLoading = { setImageLoading }
142+ />
143+
144+ < div className = "text-sm text-slate-500" > Only .jpg, .jpeg, and .png images are allowed.</ div >
145+ </ div >
161146 </ div >
162147
163148 { /* Details */ }
@@ -229,6 +214,19 @@ export default function PublicProfile() {
229214 </ div >
230215 </ DetailsCard >
231216 ) }
217+
218+ < div className = "center-all mt-2" >
219+ < Button
220+ className = "h-9 border-2 border-slate-200 bg-white data-[hover=true]:opacity-65!"
221+ color = "default"
222+ size = "sm"
223+ variant = "solid"
224+ onPress = { ( ) => setEditing ( true ) }
225+ isDisabled = { isLoading }
226+ >
227+ < div className = "text-sm" > Edit profile</ div >
228+ </ Button >
229+ </ div >
232230 </ >
233231 ) }
234232 </ div >
You can’t perform that action at this time.
0 commit comments