@@ -3,9 +3,16 @@ import Footer from "@/components/Footer";
3
3
import Navbar from "@/components/Navbar" ;
4
4
import PdfViewer from "@/components/pdfViewer" ;
5
5
import Loader from "@/components/ui/loader" ;
6
- import { PaperResponse } from "@/interface" ;
6
+ import { ErrorResponse , PaperResponse } from "@/interface" ;
7
+ import axios , { AxiosResponse } from "axios" ;
7
8
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 > {
9
16
const paper : PaperResponse | null = await fetchPaperID ( params . id ) ;
10
17
11
18
if ( paper ) {
@@ -26,20 +33,47 @@ export async function generateMetadata({ params }: { params: { id: string } }):
26
33
} ;
27
34
}
28
35
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 ) ) {
30
42
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 ( ) ;
31
55
if ( ! paper ) {
32
56
return < Loader prop = "h-screen w-screen" /> ;
33
57
}
34
58
return (
35
59
< div >
36
60
< 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
+
43
77
< Footer />
44
78
</ div >
45
79
) ;
0 commit comments