11---
22import {getCollection } from ' astro:content' ;
3- import {asLocale , slugToPostLink , useTranslations } from ' ../i18n/utils' ;
3+ import {asLocale , slugToPostLink , useTranslations , useLocalePages } from ' ../i18n/utils' ;
44import {Image } from ' astro:assets' ;
55import {mdExcerpt , pictureWidths } from ' ./utils' ;
66
7+ interface Props {
8+ limit: number ;
9+ }
10+
11+ const {limit} = Astro .props ;
12+
713const pageLang = Astro .currentLocale ;
814const t = useTranslations (pageLang );
15+ const p = useLocalePages (pageLang );
916
1017const pages = await getCollection (' posts' , (entry ) => {
1118 const [lang, ... slug] = entry .slug .split (' /' );
@@ -25,7 +32,7 @@ const paths = pages
2532 }
2633 return {params: {lang: asLocale (lang ), slug: slug .join (' /' )}, props: page };
2734 })
28- .slice (0 , 3 ); // Limit to 3 posts
35+ .slice (0 , limit ); // Limit posts based on prop
2936
3037const newsItems: Array <{
3138 title: string ;
@@ -48,43 +55,32 @@ const newsItems: Array<{
4855});
4956---
5057
51- <!-- Card Blog -->
52- <div class =" mx-auto max-w-[85rem] px-4 py-10 sm:px-6 lg:px-8 lg:py-14" >
53- <!-- Title -->
54- <div class =" mx-auto mb-10 max-w-2xl text-center lg:mb-14" >
55- <h2 class =" text-2xl font-bold md:text-4xl md:leading-tight dark:text-white" >{ t (' news.title' )} </h2 >
56- <p class =" mt-1 text-gray-600 dark:text-neutral-400" >
57- { t (' news.subtitle' )}
58- </p >
59- </div >
60- <!-- End Title -->
61-
62- <!-- Grid -->
63- <div class =" grid gap-6 sm:grid-cols-2 lg:grid-cols-3" >
64- <!-- Card -->
65- {
66- newsItems .map ((news ) => (
67- <a
68- class = " group flex h-full flex-col rounded-xl border border-gray-200 p-5 transition duration-300 hover:border-transparent hover:shadow-lg focus:border-transparent focus:shadow-lg focus:outline-hidden dark:border-neutral-700 dark:hover:border-transparent dark:hover:shadow-black/40 dark:focus:border-transparent dark:focus:shadow-black/40"
69- href = { news .link }
70- >
71- <Image class = " aspect-video w-full rounded-xl object-cover" src = { news .image } alt = { news .title } widths = { pictureWidths ()} />
72- <div class = " my-6" >
73- <h3 class = " text-xl font-semibold text-gray-800 dark:text-neutral-300 dark:group-hover:text-white" >{ news .title } </h3 >
74- <p class = " mt-5 text-gray-600 dark:text-neutral-400" >{ news .abstract } </p >
75- </div >
76- <div class = " mt-auto flex items-center gap-x-3" >
77- <div >
78- <h5 class = " text-sm text-gray-800 dark:text-neutral-200" >{ news .date } </h5 >
79- </div >
58+ <!-- Card Blog --><!-- Grid -->
59+ <div class =" grid gap-6 sm:grid-cols-2 lg:grid-cols-3" >
60+ <!-- Card -->
61+ {
62+ newsItems .map ((news ) => (
63+ <a
64+ class = " group flex h-full flex-col rounded-xl border border-gray-200 p-5 transition duration-300 hover:border-transparent hover:shadow-lg focus:border-transparent focus:shadow-lg focus:outline-hidden dark:border-neutral-700 dark:hover:border-transparent dark:hover:shadow-black/40 dark:focus:border-transparent dark:focus:shadow-black/40"
65+ href = { news .link }
66+ >
67+ <Image class = " aspect-video w-full rounded-xl object-cover" src = { news .image } alt = { news .title } widths = { pictureWidths ()} />
68+ <div class = " my-6" >
69+ <h3 class = " text-xl font-semibold text-gray-800 dark:text-neutral-300 dark:group-hover:text-white" >{ news .title } </h3 >
70+ <p class = " mt-5 text-gray-600 dark:text-neutral-400" >{ news .abstract } </p >
71+ </div >
72+ <div class = " mt-auto flex items-center gap-x-3" >
73+ <div >
74+ <h5 class = " text-sm text-gray-800 dark:text-neutral-200" >{ news .date } </h5 >
8075 </div >
81- </a >
82- ))
83- }
84- <!-- End Card -->
76+ </div >
77+ </a >
78+ ))
79+ }
80+ <!-- End Card -->
8581
86- <!-- Card -->
87- <!-- <a
82+ <!-- Card -->
83+ <!-- <a
8884 class="group flex h-full flex-col rounded-xl border border-gray-200 p-5 transition duration-300 hover:border-transparent hover:shadow-lg focus:border-transparent focus:shadow-lg focus:outline-hidden dark:border-neutral-700 dark:hover:border-transparent dark:hover:shadow-black/40 dark:focus:border-transparent dark:focus:shadow-black/40"
8985 href="#"
9086 >
@@ -114,10 +110,10 @@ const newsItems: Array<{
114110 </div>
115111 </div>
116112 </a> -->
117- <!-- End Card -->
113+ <!-- End Card -->
118114
119- <!-- Card -->
120- <!-- <a
115+ <!-- Card -->
116+ <!-- <a
121117 class="group flex h-full flex-col rounded-xl border border-gray-200 p-5 transition duration-300 hover:border-transparent hover:shadow-lg focus:border-transparent focus:shadow-lg focus:outline-hidden dark:border-neutral-700 dark:hover:border-transparent dark:hover:shadow-black/40 dark:focus:border-transparent dark:focus:shadow-black/40"
122118 href="#"
123119 >
@@ -145,31 +141,11 @@ const newsItems: Array<{
145141 </div>
146142 </div>
147143 </a> -->
148- <!-- End Card -->
149- </div >
150- <!-- End Grid -->
151-
152- <!-- Card -->
153- <!-- <div class="mt-12 text-center">
154- <a
155- class="text-main-green dark:text-main-green inline-flex items-center gap-x-1 rounded-full border border-gray-200 bg-white px-4 py-3 text-sm font-medium shadow-2xs hover:bg-gray-50 focus:bg-gray-50 focus:outline-hidden disabled:pointer-events-none disabled:opacity-50 dark:border-neutral-700 dark:bg-neutral-900 dark:hover:bg-neutral-800 dark:focus:bg-neutral-800"
156- href="#"
157- >
158- Read more
159- <svg
160- class="size-4 shrink-0"
161- xmlns="http://www.w3.org/2000/svg"
162- width="24"
163- height="24"
164- viewBox="0 0 24 24"
165- fill="none"
166- stroke="currentColor"
167- stroke-width="2"
168- stroke-linecap="round"
169- stroke-linejoin="round"><path d="m9 18 6-6-6-6"></path></svg
170- >
171- </a>
172- </div> -->
173144 <!-- End Card -->
174145</div >
146+ <!-- End Grid -->
147+
148+ <!-- View All Posts Link -->
149+
150+ <!-- End View All Posts Link -->
175151<!-- End Card Blog -->
0 commit comments