@@ -30,7 +30,6 @@ import Footer from "@/components/Footer";
30
30
31
31
const Page = ( ) => {
32
32
const router = useRouter ( ) ;
33
- // const [openCamera, setOpenCamera] = useState(false);
34
33
const fileInputRef = useRef < HTMLInputElement > ( null ) ;
35
34
36
35
const [ slot , setSlot ] = useState ( "" ) ;
@@ -41,15 +40,29 @@ const Page = () => {
41
40
const [ inputValue , setInputValue ] = useState ( '' )
42
41
43
42
const [ isSubjectCommandOpen , setIsSubjectCommandOpen ] = useState ( false ) ;
44
- // const toggleOpenCamera = () => {
45
- // setOpenCamera((prev) => !prev);
46
- // };
43
+ const [ isUploading , setIsUploading ] = useState ( false ) ;
47
44
48
45
const handlePrint = async ( ) => {
49
46
const maxFileSize = 5 * 1024 * 1024 ;
50
47
const allowedFileTypes = [ "application/pdf" , "image/jpeg" , "image/png" , "image/gif" ] ;
51
48
const files = fileInputRef . current ?. files as FileList | null ;
52
49
50
+ if ( ! slot ) {
51
+ toast . error ( "Slot is required" ) ;
52
+ return ;
53
+ }
54
+ if ( ! subject ) {
55
+ toast . error ( "Subject is required" ) ;
56
+ return ;
57
+ }
58
+ if ( ! exam ) {
59
+ toast . error ( "Exam is required" ) ;
60
+ return ;
61
+ }
62
+ if ( ! year ) {
63
+ toast . error ( "Year is required" ) ;
64
+ return ;
65
+ }
53
66
if ( ! files || files . length === 0 ) {
54
67
toast . error ( "No files selected" ) ;
55
68
return ;
@@ -72,13 +85,15 @@ const Page = () => {
72
85
73
86
const formData = new FormData ( ) ;
74
87
for ( const file of files ) {
75
- formData . append ( "files" , file ) ; // append each file
88
+ formData . append ( "files" , file ) ;
76
89
}
77
90
formData . append ( "slot" , slot ) ;
78
91
formData . append ( "subject" , subject ) ;
79
92
formData . append ( "exam" , exam ) ;
80
93
formData . append ( "year" , year ) ;
81
94
95
+ setIsUploading ( true ) ; // Set uploading to true
96
+
82
97
try {
83
98
const result = await toast . promise (
84
99
( async ( ) => {
@@ -103,17 +118,15 @@ const Page = () => {
103
118
error : ( err : ApiError ) => err . message ,
104
119
}
105
120
) ;
106
-
121
+
107
122
if ( result ?. message === "Email sent successfully!" ) {
108
- // setTimeout(() => {
109
- // router.push("/");
110
- // }, 1500);
111
123
}
112
- } catch ( e ) { }
124
+ } catch ( e ) {
125
+ } finally {
126
+ setIsUploading ( false ) ;
127
+ }
113
128
} ;
114
129
115
-
116
-
117
130
const handleSubjectSelect = ( value : string ) => {
118
131
setSubject ( value ) ;
119
132
setIsSubjectCommandOpen ( false ) ;
@@ -170,30 +183,6 @@ const Page = () => {
170
183
{ /* Subject Selection */ }
171
184
< div >
172
185
< label > Subject:</ label >
173
- { /* <div className="relative">
174
- <Button
175
- type="button"
176
- onClick={() => setIsSubjectCommandOpen((prev) => !prev)}
177
- className="m-2 rounded-md border p-2"
178
- >
179
- {subject || "Select subject"}
180
- </Button>
181
- {isSubjectCommandOpen && (
182
- <Command className="absolute z-10 mt-2 w-full rounded-lg border shadow-md">
183
- <CommandInput placeholder="Search subject..." />
184
- <CommandList>
185
- <CommandEmpty>No subjects found.</CommandEmpty>
186
- <CommandGroup heading="Subjects">
187
- {courses.map((course) => (
188
- <CommandItem key={course} onSelect={() => handleSubjectSelect(course)}>
189
- <span>{course}</span>
190
- </CommandItem>
191
- ))}
192
- </CommandGroup>
193
- </CommandList>
194
- </Command>
195
- )}
196
- </div> */ }
197
186
< Command className = "rounded-lg border shadow-md md:min-w-[450px]" >
198
187
< CommandInput
199
188
value = { inputValue }
@@ -250,7 +239,7 @@ const Page = () => {
250
239
< Input
251
240
required
252
241
type = "file"
253
- accept = "image/*,.pdf"
242
+ // accept="image/*,.pdf"
254
243
multiple
255
244
ref = { fileInputRef }
256
245
className = "hidden"
@@ -262,7 +251,7 @@ const Page = () => {
262
251
< div >
263
252
< Button
264
253
type = "button"
265
- onClick = { ( ) => fileInputRef . current ?. click ( ) } // Trigger file input on button click
254
+ onClick = { ( ) => fileInputRef . current ?. click ( ) }
266
255
className = "rounded-md px-4 py-2 transition"
267
256
>
268
257
Choose files
@@ -278,9 +267,10 @@ const Page = () => {
278
267
</ fieldset >
279
268
< Button
280
269
onClick = { handlePrint }
281
- className = "w-fit rounded-md px-4 py-3"
270
+ disabled = { isUploading }
271
+ className = { `w-fit rounded-md px-4 py-3 ${ isUploading ? "bg-gray-300" : "" } ` }
282
272
>
283
- Upload Papers
273
+ { isUploading ? "Uploading..." : " Upload Papers" }
284
274
</ Button >
285
275
</ div >
286
276
< div className = "" >
0 commit comments