Skip to content

Commit d098979

Browse files
committed
feat: book detail page
1 parent 775e5d6 commit d098979

File tree

3 files changed

+97
-8
lines changed

3 files changed

+97
-8
lines changed
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
import {
2+
Breadcrumb,
3+
BreadcrumbItem,
4+
BreadcrumbLink,
5+
BreadcrumbList,
6+
BreadcrumbPage,
7+
BreadcrumbSeparator,
8+
} from '@/components/ui/breadcrumb'
9+
import Link from 'next/link'
10+
// import { Verify } from '@/lib/firebase/firebase'
11+
import { getBook } from '@/lib/api/book'
12+
import Image from 'next/image'
13+
import clsx from 'clsx'
14+
// import { cookies } from 'next/headers'
15+
16+
export default async function BookDetailsPage({
17+
params,
18+
}: {
19+
params: Promise<{ id: string }>
20+
}) {
21+
const { id } = await params
22+
23+
// await Verify({ from: `/books/${id}` })
24+
25+
const [bookRes] = await Promise.all([getBook({ id })])
26+
27+
if ('error' in bookRes) {
28+
console.log({ libRes: bookRes })
29+
return <div>{JSON.stringify(bookRes.message)}</div>
30+
}
31+
32+
// const cookieStore = await cookies()
33+
// const sessionName = process.env.SESSION_COOKIE_NAME as string
34+
// const session = cookieStore.get(sessionName)
35+
36+
return (
37+
<div className="space-y-4">
38+
<h1 className="text-2xl font-semibold">{bookRes.data.title}</h1>
39+
<Breadcrumb>
40+
<BreadcrumbList>
41+
<BreadcrumbItem>
42+
<Link href="/" passHref legacyBehavior>
43+
<BreadcrumbLink>Home</BreadcrumbLink>
44+
</Link>
45+
</BreadcrumbItem>
46+
<BreadcrumbSeparator />
47+
<BreadcrumbItem>
48+
<Link href="/books" passHref legacyBehavior>
49+
<BreadcrumbLink>Books</BreadcrumbLink>
50+
</Link>
51+
</BreadcrumbItem>
52+
<BreadcrumbSeparator />
53+
<BreadcrumbItem>
54+
<BreadcrumbPage>{bookRes.data.title}</BreadcrumbPage>
55+
</BreadcrumbItem>
56+
</BreadcrumbList>
57+
</Breadcrumb>
58+
<div className="place-self-center flex">
59+
<div className="bg-accent shadow-xl [transform:perspective(400px)_rotateY(314deg)] -mr-1 w-10">
60+
<h2 className="my-2 text-nowrap text-sm font-bold text-accent-foreground/50 [transform:rotate(90deg)_translateY(-30px)] origin-top-left">
61+
{bookRes.data.title}
62+
</h2>
63+
</div>
64+
<Image
65+
src={bookRes.data?.cover ?? '/book-placeholder.svg'}
66+
alt={bookRes.data.title + "'s cover"}
67+
width={256}
68+
height={256}
69+
className={clsx(
70+
'shadow-xl rounded-r-lg w-56 h-auto',
71+
'[transform:perspective(800px)_rotateY(14deg)]'
72+
)}
73+
priority
74+
/>
75+
</div>
76+
<div className="place-self-center text-center">
77+
{/* <h2 className="text-xl font-semibold">{bookRes.data.title}</h2> */}
78+
<p className="text-gray-600">{bookRes.data.author}</p>
79+
<p className="text-sm text-gray-500">{bookRes.data.code}</p>
80+
</div>
81+
</div>
82+
)
83+
}

app/(protected)/books/page.tsx

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -117,7 +117,11 @@ export default async function Books({
117117
)}
118118
</TableCell>
119119
<TableCell>{b.code}</TableCell>
120-
<TableCell>{b.title}</TableCell>
120+
<TableCell>
121+
<Link href={`books/${b.id}`} className="link">
122+
{b.title}
123+
</Link>
124+
</TableCell>
121125
<TableCell>{b.library?.name}</TableCell>
122126
<TableCell>{b.author}</TableCell>
123127
<TableCell>{b.year}</TableCell>

app/(protected)/borrows/[id]/page.tsx

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -126,13 +126,15 @@ export default async function BorrowDetailsPage({
126126
<CardTitle>Book Information</CardTitle>
127127
</CardHeader>
128128
<CardContent className="grid md:grid-cols-2 gap-4">
129-
<Image
130-
src={borrowRes.data.book?.cover ?? '/book-placeholder.svg'}
131-
alt={borrowRes.data.book.title + "'s cover"}
132-
width={256}
133-
height={256}
134-
className="shadow-md rounded-lg w-56 h-auto place-self-center row-span-2"
135-
/>
129+
<Link href={`/books/${borrowRes.data.book.id}`}>
130+
<Image
131+
src={borrowRes.data.book?.cover ?? '/book-placeholder.svg'}
132+
alt={borrowRes.data.book.title + "'s cover"}
133+
width={256}
134+
height={256}
135+
className="shadow-md rounded-lg w-56 h-auto place-self-center row-span-2"
136+
/>
137+
</Link>
136138
<div>
137139
<h2 className="text-xl font-semibold">
138140
{borrowRes.data.book.title}

0 commit comments

Comments
 (0)