CategoryItems
Source:
apps/jti-next/src/components/CategoryItems/
Builder.io registration: name"Category items", model"category"
Default data bindings:items ← categoryItems,subcategoriesMap ← subcategoriesMap
Renders a responsive grid of product cards for a single category. Optionally inserts an RtbCard (highlight card with specification text) at a configurable position in the grid.
Props (CategoryItemsProps + ExtendedCategoryItemsProps)
| Prop | Type | Default | Description |
|---|---|---|---|
items |
CategoryItem[] |
required | Product list (see item shape below) |
columnDesktopWidth |
"3" \| "4" \| "6" \| "12" |
"4" |
Grid column width on desktop |
columnTabletWidth |
"3" \| "4" \| "6" \| "12" |
— | Grid column width on tablet |
withRtbCard |
boolean |
— | Insert a highlight card into the grid |
rtbCard |
HighlightCardProps & { specification?: string } |
— | Highlight card configuration (see RtbCard below) |
subcategoriesMap |
Record<string, string[]> |
— | Map of subcategory UID → SKU list; used for client-side filtering |
CategoryItem shape (each element of items):
| Field | Type | Description |
|---|---|---|
name |
string |
Product name |
url_key |
string |
Magento URL key (used for routing) |
sku |
string |
Magento SKU |
thumbnailSrc |
string |
Product listing image URL |
thumbnailAltText |
string |
Alt text for listing image |
shortDescription |
string? |
Short description text |
isNew |
boolean? |
Controls "New" badge |
categoryUrlKey |
string? |
Parent category URL key |
province |
string? |
Comma-separated province list |
+ all productCardSharedInputs fields |
Badge, visibility, CTA override fields (see ProductCard inputs) |
Config keys consumed
| Key | Effect |
|---|---|
isQuickAddToCartCtaForSimpleSticksEnabled |
Passed through to each ProductCard |
UI primitives used
@jti/ui ProductCard
See ProductCard.
@jti/ui RtbCard
Source:
packages/ui/src/components/RtbCard/RtbCard.tsx
Exported from@jti/uiindex: ✅
Thin wrapper over HighlightCard that adds an optional specification caption.
type RtbCardProps = HighlightCardProps & {
specification?: string;
};
type HighlightCardProps = {
title: string;
description?: string;
imageUrl: string;
buttonText: string;
linkUrl: string;
theme: "dark" | "light";
alt?: string;
imageTitle?: string;
rightBadgeText?: string;
leftBadgeText?: string;
backgroundType?: "video" | "image";
videoFileReference?: string;
trackingEvent?: string;
openIn?: "newTab" | "sameTab";
className?: string;
};
@jti/ui ProductCardContainerContextProvider
Source:
packages/ui/src/components/ProductCardContainerContextProvider/ProductCardContainerContextProvider.tsx
Exported from@jti/uiindex: ✅
Provides a shared context that batches dynamic product data (price, stock status, currency) for all child ProductCard instances in a single API call.
// Provider props
type Props = PropsWithChildren<{ isTrial?: boolean }>;
// Context shape
type ProductCardContainerContextType = {
productsSkus: Record<string, boolean>;
products: Record<string, DynamicProductData>;
isProductsDataLoading?: boolean;
currency?: string;
addToSkuList?: (sku: string) => void;
};
Children call addToSkuList(sku) to register; the provider fires a single useProductsDynamicData query for all registered SKUs.