Match carousel cards on XL, add gallery zoom/lightbox, quantity and comments, and update the sale banner slot to 2:3. Co-authored-by: Cursor <cursoragent@cursor.com>
62 lines
2.2 KiB
TypeScript
62 lines
2.2 KiB
TypeScript
import { About } from "@/components/About";
|
|
import { DualBanners, TripleBanners } from "@/components/Banners";
|
|
import { BlogCarousel } from "@/components/BlogCarousel";
|
|
import { Contact } from "@/components/Contact";
|
|
import { Faq } from "@/components/Faq";
|
|
import { FeaturedCategories } from "@/components/FeaturedCategories";
|
|
import { Features } from "@/components/Features";
|
|
import { Hero } from "@/components/Hero";
|
|
import { ProductCarousel } from "@/components/ProductCarousel";
|
|
import { SiteChrome } from "@/components/SiteChrome";
|
|
import { getSpecialProducts, listBlogs } from "@/lib/api";
|
|
import { getHomeStaticImageSlots, HOME_SLOT_KEYS, slotByKey } from "@/lib/static-images";
|
|
|
|
export default async function Home() {
|
|
const [slots, sale, top, own, blogs] = await Promise.all([
|
|
getHomeStaticImageSlots(),
|
|
getSpecialProducts("special-sale"),
|
|
getSpecialProducts("top-selling", "پرفروش"),
|
|
getSpecialProducts("nini-naderi-products", "نینی"),
|
|
listBlogs({ pageSize: 8 }),
|
|
]);
|
|
|
|
return (
|
|
<SiteChrome>
|
|
<Hero
|
|
slider={slotByKey(slots, HOME_SLOT_KEYS.slider)}
|
|
beside={slotByKey(slots, HOME_SLOT_KEYS.besideSlider)}
|
|
/>
|
|
<FeaturedCategories slot={slotByKey(slots, HOME_SLOT_KEYS.categories)} />
|
|
<Features />
|
|
<ProductCarousel
|
|
id="sale"
|
|
english="Special Sale"
|
|
title={sale.title || "فروش ویژه نینیها"}
|
|
products={sale.products}
|
|
countdown
|
|
leadBanner
|
|
bannerSlot={slotByKey(slots, HOME_SLOT_KEYS.specialSale)}
|
|
/>
|
|
<DualBanners slot={slotByKey(slots, HOME_SLOT_KEYS.twoBannerRow)} />
|
|
<ProductCarousel
|
|
english="Top Selling"
|
|
title={top.title || "پرفروشترینها"}
|
|
products={top.products}
|
|
href="/products"
|
|
/>
|
|
<TripleBanners slot={slotByKey(slots, HOME_SLOT_KEYS.threeBannerRow)} />
|
|
<ProductCarousel
|
|
id="nini-naderi"
|
|
english="Nini Naderi"
|
|
title={own.title || "محصولات نینی نادری"}
|
|
products={own.products}
|
|
href="/products"
|
|
/>
|
|
<About slot={slotByKey(slots, HOME_SLOT_KEYS.aboutUs)} />
|
|
<BlogCarousel posts={blogs.items} />
|
|
<Faq />
|
|
<Contact />
|
|
</SiteChrome>
|
|
);
|
|
}
|