@@ -6,12 +6,13 @@ import {
66 BreadcrumbPage ,
77 BreadcrumbSeparator ,
88} from '@/components/ui/breadcrumb'
9- import Link from 'next/link'
10- // import { Verify } from '@/lib/firebase/firebase'
119import { getBook } from '@/lib/api/book'
12- import Image from 'next/image'
13- import clsx from 'clsx'
14- // import { cookies } from 'next/headers'
10+ import { BookDown , Calendar , Hash , Library } from 'lucide-react'
11+ import { Card , CardContent , CardHeader , CardTitle } from '@/components/ui/card'
12+ import { ThreeDBook } from '@/components/books/three-d-book'
13+ import { Button } from '@/components/ui/button'
14+ import { Badge } from '@/components/ui/badge'
15+ import Link from 'next/link'
1516
1617export default async function BookDetailsPage ( {
1718 params,
@@ -20,63 +21,108 @@ export default async function BookDetailsPage({
2021} ) {
2122 const { id } = await params
2223
23- // await Verify({ from: `/books/${id}` })
24-
2524 const [ bookRes ] = await Promise . all ( [ getBook ( { id } ) ] )
2625
2726 if ( 'error' in bookRes ) {
2827 console . log ( { libRes : bookRes } )
2928 return < div > { JSON . stringify ( bookRes . message ) } </ div >
3029 }
3130
32- // const cookieStore = await cookies()
33- // const sessionName = process.env.SESSION_COOKIE_NAME as string
34- // const session = cookieStore.get(sessionName)
35-
3631 return (
3732 < div className = "space-y-4" >
3833 < h1 className = "text-2xl font-semibold" > { bookRes . data . title } </ h1 >
3934 < Breadcrumb >
4035 < BreadcrumbList >
4136 < BreadcrumbItem >
42- < Link href = "/" passHref legacyBehavior >
43- < BreadcrumbLink > Home</ BreadcrumbLink >
44- </ Link >
37+ < BreadcrumbLink href = "/" > Home</ BreadcrumbLink >
4538 </ BreadcrumbItem >
4639 < BreadcrumbSeparator />
4740 < BreadcrumbItem >
48- < Link href = "/books" passHref legacyBehavior >
49- < BreadcrumbLink > Books</ BreadcrumbLink >
50- </ Link >
41+ < BreadcrumbLink href = "/books" > Books</ BreadcrumbLink >
5142 </ BreadcrumbItem >
5243 < BreadcrumbSeparator />
5344 < BreadcrumbItem >
5445 < BreadcrumbPage > { bookRes . data . title } </ BreadcrumbPage >
5546 </ BreadcrumbItem >
5647 </ BreadcrumbList >
5748 </ Breadcrumb >
58- < div className = "place-self-center flex my-12" >
59- < div className = "bg-accent [transform:perspective(400px)_rotateY(314deg)] -mr-1 w-10" >
60- < span className = "my-2 inline-block text-nowrap text-xs font-bold text-accent-foreground/50 [transform:rotate(90deg)_translateY(-30px)] origin-top-left" >
61- { bookRes . data . title }
62- </ span >
49+
50+ < div className = "grid grid-cols-1 lg:grid-cols-3 gap-4" >
51+ { /* Book Cover */ }
52+ < div className = "lg:col-span-1 grid place-items-center gap-4" >
53+ < ThreeDBook book = { bookRes . data } />
54+ < Button className = "w-full" disabled = { true } >
55+ { true ? (
56+ < >
57+ < BookDown className = "mr-2 h-4 w-4" />
58+ Borrow Book
59+ </ >
60+ ) : (
61+ 'Currently Borrowed'
62+ ) }
63+ </ Button >
64+ < Button variant = "outline" className = "w-full bg-transparent" >
65+ Add to Wishlist
66+ </ Button >
67+ </ div >
68+
69+ { /* Book Information */ }
70+ < div className = "lg:col-span-2 space-y-4" >
71+ < div >
72+ < h1 className = "text-3xl font-bold mb-2" > { bookRes . data . title } </ h1 >
73+ < p className = "text-xl text-muted-foreground mb-4" >
74+ { bookRes . data . author }
75+ </ p >
76+ < div className = "flex flex-wrap gap-2 mb-4" >
77+ < Badge variant = { true ? 'default' : 'destructive' } >
78+ { true ? 'Available' : 'Borrowed' }
79+ </ Badge >
80+ < Badge variant = "outline" > bookRes.data.genre</ Badge >
81+ </ div >
82+ </ div >
83+
84+ < Card >
85+ < CardHeader >
86+ < CardTitle > Book Information</ CardTitle >
87+ </ CardHeader >
88+ < CardContent className = "grid gap-2 grid-cols-[max-content_1fr] md:grid-cols-[max-content_1fr_max-content_1fr] items-center" >
89+ < Hash className = "size-4" />
90+ < p >
91+ < span className = "font-medium" > Code: </ span >
92+ { bookRes . data . code }
93+ </ p >
94+ < Calendar className = "size-4" />
95+ < p >
96+ < span className = "font-medium" > Year: </ span >
97+ { bookRes . data . year }
98+ </ p >
99+ < Library className = "size-4" />
100+ < p >
101+ < span className = "font-medium" > Library: </ span >
102+ < Link href = { `/libraries/${ bookRes . data . library . id } ` } >
103+ { bookRes . data . library . name }
104+ </ Link >
105+ </ p >
106+ </ CardContent >
107+ </ Card >
108+
109+ < Card >
110+ < CardHeader >
111+ < CardTitle > Description</ CardTitle >
112+ </ CardHeader >
113+ < CardContent >
114+ < p className = "text-sm leading-relaxed" >
115+ bookRes.data.description
116+ </ p >
117+ </ CardContent >
118+ </ Card >
63119 </ 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-md w-56 h-auto' ,
71- '[transform:perspective(800px)_rotateY(14deg)]'
72- ) }
73- priority
74- />
75120 </ div >
76- < div className = "place-self-center text-center pt-4 border-t" >
121+
122+ { /* <div className="place-self-center text-center pt-4 border-t">
77123 <p className="text-gray-600">{bookRes.data.author}</p>
78124 <p className="text-sm text-gray-500">{bookRes.data.code}</p>
79- </ div >
125+ </div> */ }
80126 </ div >
81127 )
82128}
0 commit comments