11"use client" ;
22
33import React , { createContext , useContext , useState , useCallback , type ReactNode } from "react" ;
4- import { useRouter } from "next/navigation" ;
4+ import { useRouter , useSearchParams } from "next/navigation" ;
55import { type IPaper , type Filters } from "@/interface" ;
66import JSZip from "jszip" ;
77import { toast } from "react-hot-toast" ;
@@ -14,38 +14,38 @@ interface FilterState {
1414 selectedSemesters : string [ ] ;
1515 selectedCampuses : string [ ] ;
1616 selectedAnswerKeyIncluded : boolean ;
17-
17+
1818 papers : IPaper [ ] ;
1919 filteredPapers : IPaper [ ] ;
2020 selectedPapers : IPaper [ ] ;
2121 filterOptions : Filters | undefined ;
2222 appliedFilters : boolean ;
23-
23+
2424 filtersPulled : boolean ;
2525 currentPage : number ;
2626 papersPerPage : number ;
2727}
2828
2929interface FilterActions {
30-
30+
3131 setSelectedExams : ( exams : string [ ] ) => void ;
3232 setSelectedSlots : ( slots : string [ ] ) => void ;
3333 setSelectedYears : ( years : string [ ] ) => void ;
3434 setSelectedSemesters : ( semesters : string [ ] ) => void ;
3535 setSelectedCampuses : ( campuses : string [ ] ) => void ;
3636 setSelectedAnswerKeyIncluded : ( included : boolean ) => void ;
37-
38-
37+
38+
3939 setPapers : ( papers : IPaper [ ] ) => void ;
4040 setFilteredPapers : ( papers : IPaper [ ] ) => void ;
4141 setFilterOptions : ( options : Filters | undefined ) => void ;
42-
43-
42+
43+
4444 setFiltersPulled : ( pulled : boolean ) => void ;
4545 setAppliedFilters : ( applied : boolean ) => void ;
4646 setCurrentPage : ( page : number ) => void ;
47-
48-
47+
48+
4949 handleApplyFilters : (
5050 exams : string [ ] ,
5151 slots : string [ ] ,
@@ -61,8 +61,8 @@ interface FilterActions {
6161 filtersNotPulled : ( ) => void ;
6262 noAppliedFilters : ( ) => void ;
6363 closeFilters : ( ) => void ;
64-
65-
64+
65+
6666 paginatedPapers : IPaper [ ] ;
6767 totalPages : number ;
6868}
@@ -78,19 +78,19 @@ interface FilterProviderProps {
7878
7979export const FilterProvider : React . FC < FilterProviderProps > = ( { children, subject } ) => {
8080 const router = useRouter ( ) ;
81-
81+
8282 const [ selectedExams , setSelectedExams ] = useState < string [ ] > ( [ ] ) ;
8383 const [ selectedSlots , setSelectedSlots ] = useState < string [ ] > ( [ ] ) ;
8484 const [ selectedYears , setSelectedYears ] = useState < string [ ] > ( [ ] ) ;
8585 const [ selectedSemesters , setSelectedSemesters ] = useState < string [ ] > ( [ ] ) ;
8686 const [ selectedCampuses , setSelectedCampuses ] = useState < string [ ] > ( [ ] ) ;
8787 const [ selectedAnswerKeyIncluded , setSelectedAnswerKeyIncluded ] = useState < boolean > ( false ) ;
88-
88+
8989 const [ papers , setPapers ] = useState < IPaper [ ] > ( [ ] ) ;
9090 const [ filteredPapers , setFilteredPapers ] = useState < IPaper [ ] > ( [ ] ) ;
9191 const [ selectedPapers , setSelectedPapers ] = useState < IPaper [ ] > ( [ ] ) ;
9292 const [ filterOptions , setFilterOptions ] = useState < Filters > ( ) ;
93-
93+
9494 const [ filtersPulled , setFiltersPulled ] = useState < boolean > ( false ) ;
9595 const [ appliedFilters , setAppliedFilters ] = useState < boolean > ( false ) ;
9696 const [ currentPage , setCurrentPage ] = useState ( 1 ) ;
@@ -126,8 +126,9 @@ export const FilterProvider: React.FC<FilterProviderProps> = ({ children, subjec
126126 setSelectedPapers ( [ ] ) ;
127127 } , [ ] ) ;
128128
129+ const searchParams = useSearchParams ( ) ;
129130 const handleDownloadSelected = useCallback ( async ( ) => {
130-
131+
131132 if ( selectedPapers . length === 0 ) {
132133 toast . error ( "No papers selected for download." ) ;
133134 return ;
@@ -137,14 +138,10 @@ export const FilterProvider: React.FC<FilterProviderProps> = ({ children, subjec
137138 const uniquePapers = Array . from (
138139 new Set ( selectedPapers . map ( ( paper ) => paper . _id ) ) ,
139140 ) . map ( ( id ) => selectedPapers . find ( ( paper ) => paper . _id === id ) ) as IPaper [ ] ;
140-
141- if ( ! uniquePapers || uniquePapers . length === 0 ) {
142- toast . error ( "No papers selected for download." ) ;
143- return ;
144- }
145-
141+
146142 for ( const paper of uniquePapers ) {
147143 try {
144+ console . log ( paper ) ;
148145 const response = await fetch ( getSecureUrl ( paper . file_url ) ) ;
149146 const blob = await response . blob ( ) ;
150147 const filename = generateFileName ( paper ) ;
@@ -158,7 +155,7 @@ export const FilterProvider: React.FC<FilterProviderProps> = ({ children, subjec
158155 const url = URL . createObjectURL ( zipBlob ) ;
159156 const a = document . createElement ( "a" ) ;
160157 a . href = url ;
161- a . download = "papers.zip" ;
158+ a . download = searchParams . get ( "subject" ) ?. split ( " [" ) [ 0 ] ;
162159 document . body . appendChild ( a ) ;
163160 a . click ( ) ;
164161 a . remove ( ) ;
@@ -190,7 +187,7 @@ export const FilterProvider: React.FC<FilterProviderProps> = ({ children, subjec
190187 if ( anskey ) pushContent += "&answerkey=true" ;
191188
192189 router . replace ( pushContent , { scroll : false } ) ;
193-
190+
194191 setSelectedExams ( exams ) ;
195192 setSelectedSlots ( slots ) ;
196193 setSelectedYears ( years ) ;
@@ -202,7 +199,7 @@ export const FilterProvider: React.FC<FilterProviderProps> = ({ children, subjec
202199 [ router , subject , setSelectedExams , setSelectedSlots , setSelectedYears , setSelectedCampuses , setSelectedSemesters , setSelectedAnswerKeyIncluded , setCurrentPage ] ,
203200 ) ;
204201
205-
202+
206203 const paginatedPapers = ( appliedFilters ? filteredPapers : papers ) . slice (
207204 ( currentPage - 1 ) * papersPerPage ,
208205 currentPage * papersPerPage ,
@@ -227,7 +224,7 @@ export const FilterProvider: React.FC<FilterProviderProps> = ({ children, subjec
227224 filtersPulled,
228225 currentPage,
229226 papersPerPage,
230-
227+
231228 setSelectedExams,
232229 setSelectedSlots,
233230 setSelectedYears,
@@ -240,7 +237,7 @@ export const FilterProvider: React.FC<FilterProviderProps> = ({ children, subjec
240237 setFiltersPulled,
241238 setAppliedFilters,
242239 setCurrentPage,
243-
240+
244241 handleApplyFilters,
245242 handleSelectPaper,
246243 handleSelectAll,
@@ -249,7 +246,7 @@ export const FilterProvider: React.FC<FilterProviderProps> = ({ children, subjec
249246 filtersNotPulled,
250247 noAppliedFilters,
251248 closeFilters,
252-
249+
253250 paginatedPapers,
254251 totalPages,
255252 } ;
0 commit comments