1
1
'use client' ;
2
2
3
- import { Button } from '@/components/ui/button ' ;
3
+ import BookmarkActions from '@/components/bookmarks/bookmark-actions ' ;
4
4
import { Card , CardHeader } from '@/components/ui/card' ;
5
5
import { Separator } from '@/components/ui/separator' ;
6
- import {
7
- Tooltip ,
8
- TooltipContent ,
9
- TooltipProvider ,
10
- TooltipTrigger ,
11
- } from '@/components/ui/tooltip' ;
12
- import { truncate } from '@/lib/utils' ;
13
6
import { Bookmark } from '@prisma/client' ;
14
- import {
15
- BookOpen ,
16
- Link ,
17
- Search ,
18
- SquareArrowOutUpRight ,
19
- Star ,
20
- Trash ,
21
- } from 'lucide-react' ;
22
- import { useRouter } from 'next/navigation' ;
23
- import { toast } from 'sonner' ;
7
+ import { Search } from 'lucide-react' ;
24
8
25
9
interface BookmarkCardProps {
26
10
bookmark : Bookmark ;
@@ -33,13 +17,6 @@ export default function BookmarkCard({
33
17
onDelete,
34
18
onFavorite,
35
19
} : BookmarkCardProps ) {
36
- const router = useRouter ( ) ;
37
-
38
- function onCopyLink ( url : string ) {
39
- navigator . clipboard . writeText ( url ) ;
40
- toast . success ( 'Copied to clipboard' ) ;
41
- }
42
-
43
20
return (
44
21
< Card className = "flex h-full w-full flex-col justify-between rounded-lg" >
45
22
< CardHeader className = "flex h-full flex-col items-start p-5" >
@@ -60,107 +37,23 @@ export default function BookmarkCard({
60
37
) }
61
38
</ div >
62
39
</ div >
63
- < h1 className = "text-md line-clamp-2 h-[40px] overflow-hidden pl-2 pt-2 font-semibold leading-snug tracking-tight" >
64
- { truncate ( bookmark . title , 80 ) }
40
+ < h1 className = "text-md h-10 overflow-hidden truncate text-ellipsis whitespace-nowrap pl-2 pt-2 font-semibold leading-snug tracking-tight" >
41
+ { bookmark . title }
65
42
</ h1 >
66
43
</ div >
67
44
< p className = "line-clamp-2 text-xs text-gray-500 text-muted-foreground" >
68
- { truncate ( bookmark . description || '' , 100 ) }
45
+ { bookmark . description }
69
46
</ p >
70
47
</ CardHeader >
71
48
72
49
< Separator className = "opacity-75" />
73
50
74
51
< div className = "flex items-center justify-between gap-4 px-4 py-2" >
75
- < TooltipProvider delayDuration = { 500 } >
76
- < Tooltip >
77
- < TooltipTrigger asChild >
78
- < Button
79
- variant = "ghost"
80
- size = "icon"
81
- className = "flex size-7 items-center justify-center"
82
- onClick = { ( ) => window . open ( bookmark . url , '_blank' ) }
83
- >
84
- < SquareArrowOutUpRight className = "size-4 dark:text-gray-200" />
85
- < span className = "sr-only" > Visit URL</ span >
86
- </ Button >
87
- </ TooltipTrigger >
88
- < TooltipContent >
89
- < p > Visit URL</ p >
90
- </ TooltipContent >
91
- </ Tooltip >
92
- < Tooltip >
93
- < TooltipTrigger asChild >
94
- < Button
95
- variant = "ghost"
96
- size = "icon"
97
- className = "flex size-7 items-center justify-center"
98
- onClick = { ( ) => router . push ( `/bookmarks/${ bookmark . id } ` ) }
99
- >
100
- < BookOpen className = "size-4 dark:text-gray-200" />
101
- < span className = "sr-only" > Details Page Link</ span >
102
- </ Button >
103
- </ TooltipTrigger >
104
- < TooltipContent >
105
- < p > View Metadata</ p >
106
- </ TooltipContent >
107
- </ Tooltip >
108
- < Tooltip >
109
- < TooltipTrigger asChild >
110
- < Button
111
- variant = "ghost"
112
- size = "icon"
113
- className = "flex size-7 items-center justify-center"
114
- onClick = { ( ) =>
115
- onFavorite ( {
116
- ...bookmark ,
117
- isFavorite : ! bookmark . isFavorite ,
118
- } )
119
- }
120
- >
121
- < Star className = "size-4 dark:text-gray-200" />
122
- < span className = "sr-only" >
123
- { bookmark . isFavorite ? 'Remove Favorite' : 'Favorite' }
124
- </ span >
125
- </ Button >
126
- </ TooltipTrigger >
127
- < TooltipContent >
128
- { bookmark . isFavorite ? 'Remove Favorite' : 'Favorite' }
129
- </ TooltipContent >
130
- </ Tooltip >
131
- < Tooltip >
132
- < TooltipTrigger asChild >
133
- < Button
134
- variant = "ghost"
135
- size = "icon"
136
- className = "flex size-7 items-center justify-center"
137
- onClick = { ( ) => onCopyLink ( bookmark . url ) }
138
- >
139
- < Link className = "size-4 dark:text-gray-200" />
140
- < span className = "sr-only" > Copy Link</ span >
141
- </ Button >
142
- </ TooltipTrigger >
143
- < TooltipContent >
144
- < p > Copy Link</ p >
145
- </ TooltipContent >
146
- </ Tooltip >
147
- < Tooltip >
148
- < TooltipTrigger asChild >
149
- < Button
150
- variant = "ghost"
151
- size = "icon"
152
- className = "flex size-7 items-center justify-center"
153
- onClick = { ( ) => onDelete ( bookmark ) }
154
- >
155
- < Trash className = "size-4 dark:text-gray-200" />
156
- < span className = "sr-only" > Delete</ span >
157
- </ Button >
158
- </ TooltipTrigger >
159
- < TooltipContent >
160
- < p > Delete</ p >
161
- </ TooltipContent >
162
- </ Tooltip >
163
- </ TooltipProvider >
52
+ < BookmarkActions
53
+ bookmark = { bookmark }
54
+ onFavorite = { onFavorite }
55
+ onDelete = { onDelete }
56
+ />
164
57
</ div >
165
58
</ Card >
166
59
) ;
0 commit comments