Skip to content

Commit 426ed13

Browse files
committed
patch:added back removed buttons for selecting/deselecting/downloading papers
1 parent f121dc7 commit 426ed13

File tree

2 files changed

+103
-38
lines changed

2 files changed

+103
-38
lines changed

src/components/PapersCarousel.tsx

Lines changed: 71 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,33 @@ import { Skeleton } from "@/components/ui/skeleton";
1818
function PapersCarousel() {
1919
const [displayPapers, setDisplayPapers] = useState<IUpcomingPaper[]>([]);
2020
const [isLoading, setIsLoading] = useState(true);
21-
const chunkSize = 8;
21+
const [chunkSize, setChunkSize] = useState<number>(4); // dynamic chunk size
22+
23+
useEffect(() => {
24+
const handleResize = () => {
25+
if (window.innerWidth < 640) {
26+
setChunkSize(4);
27+
} else {
28+
setChunkSize(8);
29+
}
30+
};
31+
32+
// preload sample subjects
33+
localStorage.setItem(
34+
"userSubjects",
35+
JSON.stringify([
36+
"Information Security [CBS3002]",
37+
"Foundations of Data Analytics [BCSE351E]",
38+
"Design and Analysis of Algorithms [MCSE502L]",
39+
"Complex Variables and Linear Algebra [BMAT201L]",
40+
"Differential Equations and Transforms [BMAT102L]",
41+
])
42+
);
43+
44+
handleResize(); // initialize
45+
window.addEventListener("resize", handleResize);
46+
return () => window.removeEventListener("resize", handleResize);
47+
}, []);
2248

2349
useEffect(() => {
2450
async function fetchPapers() {
@@ -56,46 +82,53 @@ function PapersCarousel() {
5682
</div>
5783

5884
<CarouselContent>
59-
{isLoading
60-
? Array.from({ length: 1 }).map((_, index) => (
61-
<CarouselItem
62-
key={`skeleton-carousel-item-${index}`}
63-
className="grid grid-cols-2 grid-rows-2 gap-4 md:grid-cols-4 lg:auto-rows-fr"
64-
>
65-
{Array.from({ length: chunkSize }).map((_, idx) => (
66-
<div
67-
key={idx}
68-
className="h-full rounded-sm border-2 border-[#734DFF] bg-[#FFFFFF] shadow-lg dark:border-[#36266D] dark:bg-[#171720]"
69-
>
70-
<div className="border-b-2 border-[#453D60] p-2">
71-
<Skeleton className="h-8 w-24 rounded-md" />
72-
</div>
73-
<div className="flex flex-col justify-between p-4">
74-
<Skeleton className="mb-4 h-8 w-40 rounded-md" />
75-
<div className="flex gap-2">
76-
<Skeleton className="h-7 w-16 rounded-full" />
77-
<Skeleton className="h-7 w-16 rounded-full" />
78-
</div>
79-
</div>
80-
</div>
81-
))}
82-
</CarouselItem>
83-
))
84-
: chunkedPapers.map((paperGroup, index) => (
85-
<CarouselItem
86-
key={`carousel-item-${index}`}
87-
className="grid grid-cols-2 grid-rows-2 gap-4 md:grid-cols-4 lg:auto-rows-fr"
85+
{isLoading ? (
86+
<CarouselItem
87+
className={`grid ${
88+
chunkSize === 4
89+
? "grid-cols-2 grid-rows-2"
90+
: "grid-cols-4"
91+
} gap-4 lg:auto-rows-fr`}
92+
>
93+
{Array.from({ length: chunkSize }).map((_, idx) => (
94+
<div
95+
key={idx}
96+
className="cursor-pointer rounded-sm border-2 border-[#734DFF] bg-[#FFFFFF] text-black shadow-lg transition duration-150 ease-in-out hover:bg-[#EFEAFF] dark:border-[#36266D] dark:bg-[#171720] dark:text-white hover:dark:bg-[#262635]"
8897
>
89-
{paperGroup.map((paper, subIndex) => (
90-
<div key={subIndex} className="h-full">
91-
<UpcomingPaper
92-
subject={paper.subject}
93-
slots={paper.slots}
94-
/>
98+
<div className="border-b-2 border-[#453D60] p-2">
99+
<Skeleton className="h-6 w-24 rounded-md" />
100+
</div>
101+
<div className="flex flex-col justify-between p-4">
102+
<Skeleton className="mb-4 h-6 w-32 rounded-md" />
103+
<div className="flex gap-2">
104+
<Skeleton className="h-7 w-16 rounded-full" />
105+
<Skeleton className="h-7 w-16 rounded-full" />
95106
</div>
96-
))}
97-
</CarouselItem>
107+
</div>
108+
</div>
98109
))}
110+
</CarouselItem>
111+
) : (
112+
chunkedPapers.map((paperGroup, index) => (
113+
<CarouselItem
114+
key={`carousel-item-${index}`}
115+
className={`grid ${
116+
chunkSize === 4
117+
? "grid-cols-2 grid-rows-2"
118+
: "grid-cols-4"
119+
} gap-4 lg:auto-rows-fr`}
120+
>
121+
{paperGroup.map((paper, subIndex) => (
122+
<div key={subIndex} className="h-full">
123+
<UpcomingPaper
124+
subject={paper.subject}
125+
slots={paper.slots}
126+
/>
127+
</div>
128+
))}
129+
</CarouselItem>
130+
))
131+
)}
99132
</CarouselContent>
100133
</Carousel>
101134
</div>

src/components/SideBar.tsx

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,13 @@ function SideBar({
2020
selectedAnswerKeyIncluded,
2121
filterOptions,
2222
handleApplyFilters,
23+
noAppliedFilters,
24+
closeFilters,
25+
subject,
26+
selectedPapers,
27+
handleSelectAll,
28+
handleDeselectAll,
29+
handleDownloadAll,
2330
}: {
2431
loading: boolean;
2532
selectedExams: string[];
@@ -41,6 +48,9 @@ function SideBar({
4148
semester: string[],
4249
anskey: boolean
4350
) => void;
51+
handleSelectAll: () => void;
52+
handleDeselectAll: () => void;
53+
handleDownloadAll: () => void;
4454
}) {
4555
const exams =
4656
filterOptions?.uniqueExams.map((exam) => ({
@@ -104,6 +114,28 @@ function SideBar({
104114
</div>
105115
</div>
106116

117+
{/* Select/Deselect/Download All Buttons */}
118+
<div className="flex w-full flex-wrap justify-between border-b-2 border-[#36266d] px-[10px] py-4 gap-2">
119+
<div
120+
onClick={handleSelectAll}
121+
className="font-play cursor-pointer rounded-full border-2 border-black px-2 py-1 text-xs font-semibold hover:bg-[#B2B8FF] hover:text-black dark:border-white dark:hover:border-[#434dba] dark:hover:bg-[#434dba] dark:hover:text-white"
122+
>
123+
Select All
124+
</div>
125+
<div
126+
onClick={handleDeselectAll}
127+
className="font-play cursor-pointer rounded-full border-2 border-black px-2 py-1 text-xs font-semibold hover:bg-[#B2B8FF] hover:text-black dark:border-white dark:hover:border-[#434dba] dark:hover:bg-[#434dba] dark:hover:text-white"
128+
>
129+
Deselect All
130+
</div>
131+
<div
132+
onClick={handleDownloadAll}
133+
className="font-play cursor-pointer rounded-full border-2 border-black px-2 py-1 text-xs font-semibold hover:bg-[#B2B8FF] hover:text-black dark:border-white dark:hover:border-[#434dba] dark:hover:bg-[#434dba] dark:hover:text-white"
134+
>
135+
Download All
136+
</div>
137+
</div>
138+
107139
<div className="flex w-full flex-col items-baseline justify-between border-b-2 border-[#36266d] px-[10px]">
108140
<Accordion className="w-full" type="single" collapsible defaultValue="item-1">
109141
<AccordionItem className="border-none no-underline" value="item-1">

0 commit comments

Comments
 (0)