Skip to content

Commit 90140af

Browse files
authored
Merge pull request #392 from SarveshMD/staging
feat: subject-based zip naming
2 parents 8289122 + b79d9de commit 90140af

1 file changed

Lines changed: 25 additions & 28 deletions

File tree

src/context/filterContext.tsx

Lines changed: 25 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
"use client";
22

33
import React, { createContext, useContext, useState, useCallback, type ReactNode } from "react";
4-
import { useRouter } from "next/navigation";
4+
import { useRouter, useSearchParams } from "next/navigation";
55
import { type IPaper, type Filters } from "@/interface";
66
import JSZip from "jszip";
77
import { 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

2929
interface 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

7979
export 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

Comments
 (0)