import Link from "next/link"; import AparatVideo from "@/components/AparatVideo"; import GlassReadMore from "@/components/GlassReadMore"; import HeroSlider from "@/components/HeroSlider"; import MediaCarousel from "@/components/MediaCarousel"; import Reveal from "@/components/Reveal"; import SlotImage from "@/components/SlotImage"; import { blogCategory, blogDateLong, blogHref, blogImage, fetchBlogs } from "@/lib/blog"; import { blogPosts, brands, features, homeProducts, site, slides, whyText, windowTypes, } from "@/data/site"; import { productHref, productImage, productTitle, fetchProducts } from "@/lib/products"; import { toFaDigits } from "@/lib/format"; import { pageMetadata } from "@/lib/seo"; import { fetchStaticImageSlots, overlaySlotImages, pickSlot, type SlotMediaItem } from "@/lib/static-images"; function carouselItems(overlaid: SlotMediaItem[], fallbacks: SlotMediaItem[], max = 12) { const seen = new Set(); return fallbacks.slice(0, max).map((item, index) => { const slotItem = overlaid[index]; if (!slotItem?.image) return item; return { ...item, image: slotItem.image, href: slotItem.href || item.href, title: item.title || slotItem.title, kicker: item.kicker || slotItem.kicker, }; }).filter((item) => { if (!item.id || seen.has(item.id)) return false; seen.add(item.id); return true; }); } export const metadata = pageMetadata({ title: site.name, description: site.description, path: "/", image: "/images/hero/slide-1.jpg", absolute: true, }); export default async function HomePage() { const [slots, apiBlogs, apiProducts] = await Promise.all([ fetchStaticImageSlots("home"), fetchBlogs({ pageSize: 12 }), fetchProducts({ pageSize: 12 }), ]); const slider = overlaySlotImages( pickSlot(slots, "slider"), slides.map((slide) => ({ id: slide.id, image: slide.image, title: slide.title, })), "slider", ); const windows = overlaySlotImages( pickSlot(slots, "home-windows"), windowTypes.map((item) => ({ id: item.id, image: item.image, title: item.title, text: item.text, href: item.href, })), "home-windows", ); const whyImage = overlaySlotImages( pickSlot(slots, "home-why-image"), [{ id: "why", image: "/images/features/01.png", title: "چرا پنجره فرخ" }], "home-why-image", ); const blogFallbacks: SlotMediaItem[] = apiBlogs.items.length ? apiBlogs.items.map((post) => ({ id: post.id, image: blogImage(post), title: post.title, kicker: blogCategory(post) || undefined, text: blogDateLong(post) || undefined, href: blogHref(post), })) : blogPosts.map((post) => ({ id: post.id, image: post.image, title: post.title, kicker: post.category, href: post.href, })); const blogItems = overlaySlotImages(pickSlot(slots, "home-blog"), blogFallbacks, "home-blog"); const productFallbacks: SlotMediaItem[] = apiProducts.items.length ? apiProducts.items.map((product) => ({ id: product.id, image: productImage(product), title: productTitle(product), kicker: product.title && product.nameFa ? product.title : product.categoryNameFa || undefined, href: productHref(product), })) : homeProducts.map((product) => ({ id: product.id, image: product.image, title: product.title, kicker: product.kicker, href: product.href, })); const productItems = overlaySlotImages(pickSlot(slots, "home-products"), productFallbacks, "home-products"); const clientItems = overlaySlotImages( pickSlot(slots, "home-clients"), brands.map((brand) => ({ id: brand.id, image: brand.image, title: brand.title, })), "home-clients", ); return ( <>
{toFaDigits(site.projects)} پروژه انجام شده
{toFaDigits(site.workYears)} تجربه کاری
درب و پنجره پنجره فرخ {site.slogan}
{toFaDigits(site.experienceYears)} ســــال تجربه در صنعت

از سال {site.foundedYear}

شرکــــت درب و پنجــــــــــره
پنجره فرخ

{site.tagline}

توضیحات بیشتر

فرخ وین تولید کننده انواع پنجره UPVC و شیشه دو جداره

دسته بندی های ما

انواع درب و پنجره دوجداره

{windows.items.map((item) => (

{item.title}

{item.text}

نمایش جزئیات
))}
Farrokh

چرا پنجره فرخ ؟!

{whyText}

محصولات ما

فرخ وین، تولید کننده شیشه دو جداره

{features.map((feature) => (

{feature.title}

))}

آخرین مقالات

آیا آماده همکاری با ما هستید؟{" "} شروع یک پروژه

انتخاب مردم

کارهای خاص

برند های ما

OUR CUSTOMER

{clientItems.items.map((brand) => ( ))}
); }