11import { ReactNode , RefObject , useEffect , useRef , useState } from "react" ;
2- import { Card , CloseButton } from "react-bootstrap" ;
2+ import { Card } from "react-bootstrap" ;
33import { useTagsDispatch } from "@/contexts/TagContext" ;
44import Bookmark from "@/types/Bookmarks/Bookmark" ;
55import TagAction from "@/types/Bookmarks/TagAction" ;
@@ -46,6 +46,67 @@ async function addTagToBookmark(
4646 return action ;
4747}
4848
49+ function OverlayCard ( {
50+ url,
51+ currentBookmark,
52+ bookmark,
53+ inEditMode,
54+ edit,
55+ changeEditMode,
56+ } : {
57+ url : string ;
58+ currentBookmark : RefObject < Bookmark > ;
59+ bookmark : Bookmark ;
60+ inEditMode : boolean ;
61+ edit : RefObject < Bookmark > ;
62+ changeEditMode : ( ) => void ;
63+ } ) : ReactNode {
64+ return (
65+ < Card className = { style . bookmarkCard } >
66+ < div className = "row g-0" >
67+ < div className = "col-12" >
68+ < Card . Img
69+ className = { `${ style . cImg } ` }
70+ src = { url + bookmark . screenshotUrl }
71+ alt = "screenshot preview"
72+ > </ Card . Img >
73+ </ div >
74+ < div className = "col-12" >
75+ < PlainCard
76+ changeEditMode = { changeEditMode }
77+ bookmark = { bookmark }
78+ currentBookmark = { currentBookmark }
79+ inEditMode = { inEditMode }
80+ edit = { edit }
81+ > </ PlainCard >
82+ </ div >
83+ </ div >
84+ </ Card >
85+ ) ;
86+ }
87+ function PlainCard ( {
88+ currentBookmark,
89+ bookmark,
90+ inEditMode,
91+ edit,
92+ changeEditMode,
93+ } : {
94+ currentBookmark : RefObject < Bookmark > ;
95+ bookmark : Bookmark ;
96+ inEditMode : boolean ;
97+ edit : RefObject < Bookmark > ;
98+ changeEditMode : ( ) => void ;
99+ } ) : ReactNode {
100+ return (
101+ < CardBody
102+ bookmark = { currentBookmark . current }
103+ highlight = { bookmark . textHighlight }
104+ inEditMode = { inEditMode }
105+ edit = { edit }
106+ changeEditMode = { changeEditMode }
107+ />
108+ ) ;
109+ }
49110export default function BookmarkCard ( { bookmark } : Readonly < BookmarkProp > ) {
50111 const dispatch = useTagsDispatch ( ) ;
51112 const bkmkDispatch = useBookmarkDispatch ( ) ;
@@ -195,20 +256,24 @@ export default function BookmarkCard({ bookmark }: Readonly<BookmarkProp>) {
195256 }
196257 }
197258
198- function resolveCardType ( ) : ReactNode {
199- return bookmark . screenshotUrl ? overlayCard ( ) : plainCard ( ) ;
200- }
201-
202- function overlayCard ( ) : ReactNode {
203- return (
204- < Card className = { style . bookmarkCard } >
205- < img
206- className = "card-img-top"
207- src = { imgApi + bookmark . screenshotUrl }
208- alt = "screenshot preview"
209- />
210- { plainCard ( ) }
211- </ Card >
259+ function Content ( ) : ReactNode {
260+ return bookmark . screenshotUrl ? (
261+ < OverlayCard
262+ url = { imgApi }
263+ changeEditMode = { changeEditMode }
264+ bookmark = { bookmark }
265+ currentBookmark = { currentBookmark }
266+ inEditMode = { inEditMode }
267+ edit = { edit }
268+ />
269+ ) : (
270+ < PlainCard
271+ changeEditMode = { changeEditMode }
272+ bookmark = { bookmark }
273+ currentBookmark = { currentBookmark }
274+ inEditMode = { inEditMode }
275+ edit = { edit }
276+ > </ PlainCard >
212277 ) ;
213278 }
214279
@@ -217,24 +282,17 @@ export default function BookmarkCard({ bookmark }: Readonly<BookmarkProp>) {
217282 handleEdits ( ! inEditMode ) ;
218283 }
219284
220- function plainCard ( ) : ReactNode {
221- return (
222- < CardBody
223- bookmark = { currentBookmark . current }
224- highlight = { bookmark . textHighlight }
225- inEditMode = { inEditMode }
226- edit = { edit }
227- changeEditMode = { changeEditMode }
228- />
229- ) ;
230- }
231-
232285 return (
233- < div data-testid = { `bookmark-${ bookmark . title } ` } className = { style . main } >
286+ < div
287+ data-testid = { `bookmark-${ bookmark . title } ` }
288+ className = { `${ style . cardRoot } ` }
289+ >
234290 < div className = { `card ${ style . bookmarkCard } ` } >
235291 < div className = { style . cardHeader } >
236- < CloseButton
237- className = { style . deleteBookmarkIcon }
292+ < button
293+ type = "button"
294+ aria-label = "Close"
295+ className = { `${ style . deleteBookmarkIcon } btn-close` }
238296 onClick = { handleShow }
239297 data-testid = { `bk-id-${ bookmark . id } -deleteBtn` }
240298 />
@@ -251,8 +309,8 @@ export default function BookmarkCard({ bookmark }: Readonly<BookmarkProp>) {
251309 handleClose = { handleClose }
252310 deleteBkmk = { deleteBkmk }
253311 />
254- { resolveCardType ( ) }
255- < Card . Footer className = { style . cardFooter } >
312+ < Content />
313+ < div className = { `card-footer ${ style . cardFooter } ` } >
256314 < div className = { style . container } >
257315 { strTags . map ( ( tag ) => (
258316 < button
@@ -280,7 +338,7 @@ export default function BookmarkCard({ bookmark }: Readonly<BookmarkProp>) {
280338 onChange = { onChange }
281339 />
282340 </ div >
283- </ Card . Footer >
341+ </ div >
284342 </ div >
285343 </ div >
286344 ) ;
0 commit comments