@@ -51,89 +51,107 @@ const Blogs: React.FC = () => {
5151 ) }
5252 </ div >
5353 { loading ? (
54- < div className = "flex justify-center items-center h-screen" >
55- < div className = "spinner-border animate-spin inline-block w-8 h-8 border-4 rounded-full border-t-4 border-green-500" role = "status" >
56- < span className = "sr-only" > Loading...</ span >
57- </ div >
58- </ div >
54+ < div className = "flex justify-center items-center h-screen" >
55+ < div
56+ className = "spinner-border animate-spin inline-block w-8 h-8 border-4 rounded-full border-t-4 border-green-500"
57+ role = "status"
58+ >
59+ < span className = "sr-only" > Loading...</ span >
60+ </ div >
61+ </ div >
5962 ) : blogs . length > 0 ? (
6063 < >
61- < div className = "grid grid-cols-1 sm:grid-cols-3 md:grid-cols-1 gap-6 px-10" >
64+ < div className = "grid grid-cols-1 sm:grid-cols-3 md:grid-cols-1 gap-6 px-10" >
6265 { blogs . map ( ( blog ) => (
63- < div
64- key = { blog . id }
65- className = "bg-gray-200 dark:bg-dark-frame-bg dark:text-white text-primary shadow-lg rounded-lg cursor-pointer hover:shadow-xl transition duration-300"
66- >
67- < Link to = { `/blogs/${ blog . id } ` } >
68- < img
69- src = { blog . coverImage }
70- alt = { blog . title }
71- className = "w-full h-40 object-cover mb-4"
72- />
73- </ Link >
74- < div className = "p-3" >
75- < div className = "flex justify-between text-sm text-primary dark:text-white mb-4 items-center" >
76- < div className = "flex items-center gap-3" >
77- < Link to = { `/blogs/${ blog . id } ` } >
78- < div className = "flex flex-wrap items-center gap-3" >
79- < span className = "font-semibold flex flex-row gap-2 items-center" >
80- < FaUser size = { 20 } className = "dark:text-green" /> { blog . author . firstname }
81- </ span >
82- < span className = "ml-2 flex flex-row gap-2 items-center" >
83- < FaCalendar size = { 20 } className = "dark:text-green" />
84- { blog . created_at
85- ? new Date ( Number ( blog . created_at ) ) . toLocaleDateString ( )
86- : "Unknown Date" }
87- </ span >
88- < span className = "flex flex-row gap-1 items-center" >
89- < CiHeart size = { 20 } className = "dark:text-green" /> { blog . reactions . length || 0 }
90- </ span >
91- < span className = "flex flex-row gap-1 items-center" >
92- < FaCommentDots size = { 20 } className = "dark:text-green" /> { blog . comments . length || 0 }
93- </ span >
94- </ div >
95- </ Link >
96- </ div >
97- </ div >
98- < Link to = { `/blogs/${ blog . id } ` } >
99- < h3 className = "text-xl font-semibold mb-2" > { blog . title } </ h3 >
100- < p className = "mb-4 text-black-text dark:text-white overflow-hidden line-clamp-3" >
101- { blog . content . substring ( 0 , 150 ) } ...
102- </ p >
103- </ Link >
104- < div className = "flex flex-wrap gap-2 mt-3" >
105- { blog . tags . map ( ( tag ) => (
106- < span
107- key = { tag }
108- onClick = { ( e ) => {
109- setSelectedTag ( tag ) ;
110- } }
111- className = "bg-green-100 text-green-700 text-xs px-2 py-1 rounded cursor-pointer hover:bg-green-200"
112- >
113- #{ tag }
114- </ span >
115- ) ) }
116- </ div >
117- </ div >
118-
119- </ div >
120-
66+ < div
67+ key = { blog . id }
68+ className = "bg-gray-200 dark:bg-dark-frame-bg dark:text-white text-primary shadow-lg rounded-lg cursor-pointer hover:shadow-xl transition duration-300"
69+ >
70+ < Link to = { `/blogs/${ blog . id } ` } >
71+ < img
72+ src = { blog . coverImage }
73+ alt = { blog . title }
74+ className = "w-full h-40 object-cover mb-4"
75+ />
76+ </ Link >
77+ < div className = "p-3" >
78+ < div className = "flex justify-between text-sm text-primary dark:text-white mb-4 items-center" >
79+ < div className = "flex items-center gap-3" >
80+ < Link to = { `/blogs/${ blog . id } ` } >
81+ < div className = "flex flex-wrap items-center gap-3" >
82+ < span className = "font-semibold flex flex-row gap-2 items-center" >
83+ < FaUser size = { 20 } className = "dark:text-green" /> { " " }
84+ { blog . author . firstname }
85+ </ span >
86+ < span className = "ml-2 flex flex-row gap-2 items-center" >
87+ < FaCalendar
88+ size = { 20 }
89+ className = "dark:text-green"
90+ />
91+ { blog . created_at
92+ ? new Date (
93+ Number ( blog . created_at )
94+ ) . toLocaleDateString ( )
95+ : "Unknown Date" }
96+ </ span >
97+ < span className = "flex flex-row gap-1 items-center" >
98+ < CiHeart size = { 20 } className = "dark:text-green" /> { " " }
99+ { blog . reactions . length || 0 }
100+ </ span >
101+ < span className = "flex flex-row gap-1 items-center" >
102+ < FaCommentDots
103+ size = { 20 }
104+ className = "dark:text-green"
105+ /> { " " }
106+ { blog . comments . length || 0 }
107+ </ span >
108+ </ div >
109+ </ Link >
110+ </ div >
111+ </ div >
112+ < Link to = { `/blogs/${ blog . id } ` } >
113+ < h3 className = "text-xl font-semibold mb-2" >
114+ { blog . title }
115+ </ h3 >
116+ < div
117+ className = "mb-4 text-black-text dark:text-white overflow-hidden line-clamp-3"
118+ dangerouslySetInnerHTML = { {
119+ __html : `${ blog . content . substring ( 0 , 150 ) } ...` ,
120+ } }
121+ > </ div >
122+ </ Link >
123+ < div className = "flex flex-wrap gap-2 mt-3" >
124+ { blog . tags . map ( ( tag ) => (
125+ < span
126+ key = { tag }
127+ onClick = { ( e ) => {
128+ setSelectedTag ( tag ) ;
129+ } }
130+ className = "bg-green-100 text-green-700 text-xs px-2 py-1 rounded cursor-pointer hover:bg-green-200"
131+ >
132+ #{ tag }
133+ </ span >
134+ ) ) }
135+ </ div >
136+ </ div >
137+ </ div >
121138 ) ) }
122139 </ div >
123-
124- </ >
140+ </ >
125141 ) : (
126142 < div className = "flex flex-col justify-center items-center h-screen text-center dark:bg-dark-bg bg-white px-6" >
127- < svg
128- xmlns = "http://www.w3.org/2000/svg"
129- viewBox = "0 0 24 24"
130- fill = "currentColor"
131- className = "w-16 h-16 text-gray-500 mb-4"
132- >
133- < path d = "M12 2a10 10 0 11-10 10A10 10 0 0112 2zm5 11H7a1 1 0 000 2h10a1 1 0 000-2zm-1-4a1 1 0 01-1 1H9a1 1 0 010-2h6a1 1 0 011 1z" />
134- </ svg >
135- < p className = "text-lg text-gray-500 dark:text-gray-300" > No blogs available at the moment. Check back later!</ p >
136- </ div >
143+ < svg
144+ xmlns = "http://www.w3.org/2000/svg"
145+ viewBox = "0 0 24 24"
146+ fill = "currentColor"
147+ className = "w-16 h-16 text-gray-500 mb-4"
148+ >
149+ < path d = "M12 2a10 10 0 11-10 10A10 10 0 0112 2zm5 11H7a1 1 0 000 2h10a1 1 0 000-2zm-1-4a1 1 0 01-1 1H9a1 1 0 010-2h6a1 1 0 011 1z" />
150+ </ svg >
151+ < p className = "text-lg text-gray-500 dark:text-gray-300" >
152+ No blogs available at the moment. Check back later!
153+ </ p >
154+ </ div >
137155 ) }
138156 </ div >
139157 < Footer />
0 commit comments