Skip to content

Commit 6fb6e87

Browse files
author
advikgupta
committed
created PapersCarousel template component
1 parent 5da17de commit 6fb6e87

File tree

6 files changed

+61
-134
lines changed

6 files changed

+61
-134
lines changed

src/app/api/papers/route.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ export async function GET(req: NextRequest) {
2929
if (papers.length === 0) {
3030
return NextResponse.json(
3131
{ message: "No papers found for the specified subject" },
32-
{ status: 404 },
32+
{ status: 200 },
3333
);
3434
}
3535

src/app/api/user-papers/route.ts

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,19 +15,27 @@ export async function POST(req: Request) {
1515
subject: { $in: subjects },
1616
});
1717

18-
let transformedPapers = usersPapers.map((paper) => ({
19-
subject: paper.subject,
20-
slots: [paper.slot],
21-
}));
18+
const transformedPapers = usersPapers.reduce((acc, paper) => {
19+
const existing = acc.find((item) => item.subject === paper.subject);
2220

23-
// check duplicates
24-
transformedPapers = Array.from(
25-
new Map(transformedPapers.map((item) => [item.subject, item])).values(),
26-
);
21+
if (existing) {
22+
existing.slots.push(paper.slot);
23+
} else {
24+
acc.push({ subject: paper.subject, slots: [paper.slot] });
25+
}
26+
27+
return acc;
28+
}, []);
2729

28-
console.log("usersPapers", usersPapers);
30+
// check duplicates
31+
const seenSubjects = new Set();
32+
const uniquePapers = transformedPapers.filter((paper) => {
33+
if (seenSubjects.has(paper.subject)) return false;
34+
seenSubjects.add(paper.subject);
35+
return true;
36+
});
2937

30-
return NextResponse.json(transformedPapers, {
38+
return NextResponse.json(uniquePapers, {
3139
status: 200,
3240
});
3341
} catch (error) {

src/components/UsersPapers.tsx renamed to src/components/PapersCarousel.tsx

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,11 @@ import {
1515
import Autoplay from "embla-carousel-autoplay";
1616
import { chunkArray } from "@/util/utils";
1717

18-
function UsersPapers() {
18+
function PapersCarousel({
19+
carouselType,
20+
}: {
21+
carouselType: "users" | "default";
22+
}) {
1923
const [displayPapers, setDisplayPapers] = useState<IUpcomingPaper[]>([]);
2024
const [isLoading, setIsLoading] = useState(true);
2125
const [chunkSize, setChunkSize] = useState<number>(4);
@@ -53,10 +57,19 @@ function UsersPapers() {
5357
useEffect(() => {
5458
async function fetchPapers() {
5559
try {
56-
const storedSubjects = JSON.parse(localStorage.getItem("userSubjects"));
5760
setIsLoading(true);
58-
const response = await axios.post("/api/user-papers", storedSubjects);
59-
setDisplayPapers(response.data);
61+
if (carouselType === "users") {
62+
const storedSubjects = JSON.parse(
63+
localStorage.getItem("userSubjects"),
64+
);
65+
const response = await axios.post("/api/user-papers", storedSubjects);
66+
setDisplayPapers(response.data);
67+
} else {
68+
const response = await axios.get<IUpcomingPaper[]>(
69+
"/api/upcoming-papers",
70+
);
71+
setDisplayPapers(response.data);
72+
}
6073
} catch (error) {
6174
console.error("Failed to fetch papers:", error);
6275
} finally {
@@ -76,7 +89,7 @@ function UsersPapers() {
7689
return (
7790
<div className="px-4">
7891
<p className="my-8 text-center font-play text-lg font-semibold">
79-
Users Papers
92+
{carouselType === "users" ? "Your Papers" : "Upcoming Papers"}
8093
</p>
8194

8295
<div className="">
@@ -117,4 +130,4 @@ function UsersPapers() {
117130
);
118131
}
119132

120-
export default UsersPapers;
133+
export default PapersCarousel;

src/components/Searchbar/searchbar-child.tsx

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,17 @@ function SearchBarChild({
2525
const response = await axios.get("/api/papers", {
2626
params: { subject: subjectName },
2727
});
28-
return response.data.papers.length; // Assuming the API returns an array of papers
28+
29+
if (
30+
response.data.message === "No papers found for the specified subject"
31+
) {
32+
return 0;
33+
}
34+
35+
return response.data.papers.length;
2936
} catch (error) {
30-
return 0; // Return 0 if there's no papers found or an error occurs
37+
console.error("Error fetching paper quantity:", error);
38+
return "request-error";
3139
}
3240
};
3341

@@ -44,7 +52,16 @@ function SearchBarChild({
4452
.map((item) => item.item)
4553
.slice(0, 10);
4654

47-
setSuggestions(filteredSuggestions);
55+
const suggestionsWithCount = await Promise.all(
56+
filteredSuggestions.map(async (suggestion) => {
57+
const count = await fetchPaperQuantityByName(suggestion);
58+
return count !== "request-error"
59+
? `${suggestion} (${count})`
60+
: suggestion;
61+
}),
62+
);
63+
64+
setSuggestions(suggestionsWithCount);
4865
} else {
4966
setSuggestions([]);
5067
}

src/components/StoredPapers.tsx

Lines changed: 0 additions & 110 deletions
This file was deleted.

src/components/screens/Hero.tsx

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import React from "react";
22
import SearchBar from "../Searchbar/searchbar";
3-
import StoredPapers from "../StoredPapers";
4-
import UsersPapers from "../UsersPapers";
3+
import PapersCarousel from "../PapersCarousel";
54

65
const Hero = () => {
76
return (
@@ -12,8 +11,8 @@ const Hero = () => {
1211
<div className="px-6">
1312
<SearchBar />
1413
</div>
15-
<UsersPapers />
16-
<StoredPapers />
14+
<PapersCarousel carouselType="users" />
15+
<PapersCarousel carouselType="default" />
1716
{/* <div className="hidden lg:flex flex-col items-center whitespace-nowrap text-center">
1817
<h1 className="font-play text-md">Learn More</h1>
1918
<Link

0 commit comments

Comments
 (0)