feat: unify catalog and improve detail pages

This commit is contained in:
amirhosein.ashourloo
2026-09-28 09:35:40 +03:30
parent 3af4e04bdd
commit 804eb8702f
17 changed files with 953 additions and 388 deletions
@@ -6,7 +6,12 @@ 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 { productHref, type ProductGroup, type StaticImageWithUrl } from "@/lib/meshkee";
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
@@ -21,10 +26,6 @@ function englishLabelFromKey(key: string): string | undefined {
return /[a-zA-Z]/.test(label) ? label.toUpperCase() : undefined;
}
function isSpecialSaleGroup(group: ProductGroup): boolean {
return /فروش\s*ویژه|special[\s_-]*sale/i.test(`${group.title} ${group.key}`);
}
function SpecialSaleSection({ group }: { group: ProductGroup }) {
return (
<section className="bg-red py-6 md:py-8">
@@ -48,7 +49,7 @@ function SpecialSaleSection({ group }: { group: ProductGroup }) {
<p className="mt-1.5 mb-4 text-xs text-white/80 md:text-sm">تا پایان فروش ویژه</p>
<SpecialSaleCountdown />
<a
href={`/products?specialId=${group.id}`}
href={`/store-items?specialId=${group.id}`}
className="mt-4 flex shrink-0 items-center gap-1.5 rounded-lg bg-white px-4 py-2 text-sm font-medium text-black transition-colors hover:bg-white/90"
>
مشاهده همه
@@ -127,7 +128,7 @@ export function StoreSpecialCarousels({
title={group.title}
enTitle={englishLabelFromKey(group.key)}
action="مشاهده همه"
actionHref={`/products?specialId=${group.id}`}
actionHref={`/store-items?specialId=${group.id}`}
/>
<Carousel ariaLabel={`کاروسل ${group.title}`}>
{group.items.map((product) => (