11import { Book } from '@/lib/types/book'
22import Image from 'next/image'
3- import { Calendar , Hash } from 'lucide-react'
3+ import { BadgeCheck , BadgeMinus , Calendar , Hash } from 'lucide-react'
44import {
55 Card ,
66 CardContent ,
@@ -12,17 +12,18 @@ import clsx from 'clsx'
1212
1313export const ListBook : React . FC < { book : Book } > = ( { book } ) => {
1414 return (
15- < Card className = "group cursor-pointer transition-all duration-200 hover:shadow-lg hover:-translate-y-1" >
15+ < Card
16+ className = { clsx (
17+ 'group cursor-pointer transition-all duration-200 hover:shadow-lg hover:-translate-y-1' ,
18+ book . stats ?. is_available && ''
19+ ) }
20+ >
1621 < CardHeader className = "pb-3" >
1722 < div className = "grid place-items-center" >
1823 { /* 3D Book Effect */ }
1924 < div className = "flex my-12" >
2025 < div className = "bg-accent [transform:perspective(400px)_rotateY(314deg)] -mr-1 w-4" >
21- < span className = "inline-block text-nowrap text-[0.5rem] font-bold text-accent-foreground/50 [transform:rotate(90deg)_translateY(-16px)] origin-top-left" >
22- { /* {book.title.length > 15
23- ? book.title.substring(0, 25) + '...'
24- : book.title} */ }
25- </ span >
26+ < span className = "inline-block text-nowrap text-[0.5rem] font-bold text-accent-foreground/50 [transform:rotate(90deg)_translateY(-16px)] origin-top-left" > </ span >
2627 </ div >
2728 < Image
2829 src = { book ?. cover ?? '/book-placeholder.svg' }
@@ -31,28 +32,12 @@ export const ListBook: React.FC<{ book: Book }> = ({ book }) => {
3132 height = { 192 }
3233 className = { clsx (
3334 'shadow-xl rounded-r-md w-32 h-48 object-cover' ,
34- '[transform:perspective(800px)_rotateY(14deg)]'
35+ '[transform:perspective(800px)_rotateY(14deg)]' ,
36+ ! book . stats ?. is_available && 'grayscale'
3537 ) }
3638 priority
3739 />
3840 </ div >
39- { /* <div className="bg-accent [transform:perspective(400px)_rotateY(314deg)] -mr-1 w-3 h-48">
40- <span className="my-2 inline-block text-nowrap text-xs font-bold text-accent-foreground/50 [transform:rotate(90deg)_translateY(-20px)] origin-top-left">
41- {book.title.length > 15
42- ? book.title.substring(0, 15) + '...'
43- : book.title}
44- </span>
45- </div>
46- <Image
47- src={
48- book.cover ??
49- '/placeholder.svg?height=192&width=128&text=No+Cover'
50- }
51- alt={`${book.title} cover`}
52- width={128}
53- height={192}
54- className="shadow-xl rounded-r-md w-32 h-48 object-cover [transform:perspective(800px)_rotateY(14deg)] group-hover:[transform:perspective(800px)_rotateY(8deg)] transition-transform duration-300"
55- /> */ }
5641 </ div >
5742 < CardTitle className = "text-lg line-clamp-1" > { book . title } </ CardTitle >
5843 < CardDescription className = "line-clamp-1" >
@@ -74,12 +59,20 @@ export const ListBook: React.FC<{ book: Book }> = ({ book }) => {
7459 {book.genre}
7560 </Badge>
7661 )} */ }
77- { /* <div className="flex justify-between items-center mt-3">
78- <Badge variant={book.available ? "default" : "destructive"}>
79- {book.available ? "Available" : "Borrowed"}
80- </Badge>
81- <span className="text-xs text-muted-foreground">{book.library}</span>
82- </div> */ }
62+
63+ < div className = "flex items-center gap-2 text-sm text-muted-foreground" >
64+ { book . stats ?. is_available ? (
65+ < >
66+ < BadgeCheck className = "h-3 w-3 text-primary" />
67+ < span > Available</ span >
68+ </ >
69+ ) : (
70+ < >
71+ < BadgeMinus className = "h-3 w-3" />
72+ < span > Borrowed</ span >
73+ </ >
74+ ) }
75+ </ div >
8376 </ div >
8477 </ CardContent >
8578 </ Card >
0 commit comments