Skip to content

Commit 9636e1e

Browse files
added error handling'
1 parent f8f6e41 commit 9636e1e

File tree

1 file changed

+43
-9
lines changed

1 file changed

+43
-9
lines changed

src/app/paper/[id]/page.tsx

Lines changed: 43 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,16 @@ import Footer from "@/components/Footer";
33
import Navbar from "@/components/Navbar";
44
import PdfViewer from "@/components/pdfViewer";
55
import Loader from "@/components/ui/loader";
6-
import { PaperResponse } from "@/interface";
6+
import { ErrorResponse, PaperResponse } from "@/interface";
7+
import axios, { AxiosResponse } from "axios";
78
import { Metadata } from "next";
8-
export async function generateMetadata({ params }: { params: { id: string } }): Promise<Metadata> {
9+
import { redirect } from "next/navigation"; // Import redirect
10+
11+
export async function generateMetadata({
12+
params,
13+
}: {
14+
params: { id: string };
15+
}): Promise<Metadata> {
916
const paper: PaperResponse | null = await fetchPaperID(params.id);
1017

1118
if (paper) {
@@ -26,20 +33,47 @@ export async function generateMetadata({ params }: { params: { id: string } }):
2633
};
2734
}
2835
const PaperPage = async ({ params }: { params: { id: string } }) => {
29-
const paper = await fetchPaperID(params.id);
36+
async function getPaper() {
37+
try {
38+
const paper = await fetchPaperID(params.id);
39+
return paper;
40+
} catch (err) {
41+
if (axios.isAxiosError(err)) {
3042

43+
const errorResponse = err.response as AxiosResponse<ErrorResponse>;
44+
if (errorResponse?.status === 400 || errorResponse?.status === 404) {
45+
redirect("/");
46+
} else {
47+
return errorResponse?.data?.message ?? "Failed to fetch paper";
48+
}
49+
} else {
50+
return "An unknown error occurred";
51+
}
52+
}
53+
}
54+
const paper = await getPaper();
3155
if (!paper) {
3256
return <Loader prop="h-screen w-screen" />;
3357
}
3458
return (
3559
<div>
3660
<Navbar />
37-
<h1 className="jost mb-4 text-center text-2xl font-semibold md:mb-10 md:text-3xl">
38-
{paper.subject} {paper.exam} {paper.slot} {paper.year}
39-
</h1>
40-
<center>
41-
<PdfViewer url={paper.finalUrl}></PdfViewer>
42-
</center>
61+
{typeof paper === "string" ? (
62+
<div className="text-center text-red-500">
63+
<h1 className="text-xl font-semibold">Error</h1>
64+
<p>{paper}</p>
65+
</div>
66+
) : (
67+
<>
68+
<h1 className="jost mb-4 text-center text-2xl font-semibold md:mb-10 md:text-3xl">
69+
{paper.subject} {paper.exam} {paper.slot} {paper.year}
70+
</h1>
71+
<center>
72+
<PdfViewer url={paper.finalUrl}></PdfViewer>
73+
</center>
74+
</>
75+
)}
76+
4377
<Footer />
4478
</div>
4579
);

0 commit comments

Comments
 (0)