import { Fragment } from "react"; import { Carousel } from "@/components/ui/Carousel"; import { ProductCard } from "@/components/ui/ProductCard"; import { SectionTitle } from "@/components/ui/SectionTitle"; import { ChevronLeftIcon } from "@/components/ui/icons"; import { TwoBanners } from "@/components/home/TwoBanners"; import { ThreeBanners } from "@/components/home/ThreeBanners"; import { SpecialSaleCountdown } from "@/components/home/SpecialSaleCountdown"; import { isSpecialSaleGroup, productHref, type ProductGroup, type StaticImageWithUrl, } from "@/lib/meshkee"; // The API only gives one `title` string per group (sometimes already // English, e.g. "Special Sale", sometimes Persian) — there's no separate // localized English field to pull a real translation from, and inventing // one would be fabricated data. `key` is real data and usually a readable // English slug (e.g. "top-selling"), so it's what gets formatted into the // English caption beside the title (same inline treatment as every other // section heading on the site, e.g. BlogCarousel's "LATEST BLOG"). Skip it // if the key has no letters at all (e.g. it fell back to a bare numeric id). function englishLabelFromKey(key: string): string | undefined { const label = key.replace(/[-_]+/g, " ").trim(); return /[a-zA-Z]/.test(label) ? label.toUpperCase() : undefined; } function SpecialSaleSection({ group }: { group: ProductGroup }) { return (
{group.items.map((product) => ( ))}
); } // Renders every admin-managed carousel from GET /store-specials — whatever // groups exist there, in their configured order. Nothing here is keyed off // a specific group id/key/title, so a new carousel created in the Meshkee // dashboard (any name) shows up on the homepage automatically, with no code // change. Groups with no items are skipped (honest empty state — no heading // over nothing). // // One of the two banner sections is inserted between every pair of // carousels (never before the first or after the last), cycling if there // end up being more than two carousels. export function StoreSpecialCarousels({ groups, contactPhone, twoBannerImages, twoBannerAspectRatio, threeBannerImages, threeBannerAspectRatio, }: { groups: ProductGroup[]; contactPhone?: string; twoBannerImages?: StaticImageWithUrl[]; twoBannerAspectRatio?: string; threeBannerImages?: StaticImageWithUrl[]; threeBannerAspectRatio?: string; }) { const visibleGroups = groups.filter((group) => group.items.length > 0); const banners = [ , , ]; return ( <> {visibleGroups.map((group, i) => ( {i > 0 && banners[(i - 1) % banners.length]} {isSpecialSaleGroup(group) ? ( ) : (
{group.items.map((product) => ( ))}
)}
))} ); }