ConsumablesProduct
Source:
apps/jti-next/src/components/ConsumablesProduct/
Server component (RSC) for consumable product PDPs (e.g. nicotine pouches or tabs sold in multi-flavour matrices). Fetches consumable product data and a "product" model Builder.io entry with productType: "consumables".
Props
ProductTemplateProps plus:
| Prop | Type | Description |
|---|---|---|
slug |
string |
Magento url_key of the product |
locale |
string |
Active locale |
categoryUrlKey |
string |
Parent category URL key (for breadcrumbs) |
activeVariantSku |
string? |
Pre-selected variant SKU |
sticksMatrixData |
SticksMatrixData? |
Sticks matrix data if applicable |
consumablesMatrixData |
ConsumablesMatrixData |
Consumables matrix (packaging formats, flavours, purchase types) |
Builder.io "product" model data bindings
| Key | Description |
|---|---|
productSku |
Product SKU |
productName |
Display name |
productDescription / productShortDescription |
Long and short descriptions |
productBadgeText / productOverwriteBadgeText |
Badge text from Magento and editorial override |
productKnowMoreUrl |
"Learn more" link |
productIsCommerceDisabled |
Commerce kill-switch |
productIsMultiPackEnabled / productMultiPackName / productMultiPackDescription / productMultiPackProducts |
Multi-pack configuration |
productCustomBuyCtaLabel |
Override CTA label |
productConsumablesMatrixData |
Full consumables matrix for flavour selector |
productIsSubscriptionsEnabled |
Whether subscriptions are available |
teaserProducts / products |
Cross-sell and variant product data |
UI primitive: @jti/ui ConsumablesFormStepSection
Source:
packages/ui/src/components/ConsumablesFormStepSection/ConsumablesFormStepSection.tsx
Exported from@jti/uiindex: ✅
Renders a <fieldset> / <legend> step wrapper for each section of the consumables purchase form (e.g. "Choose format", "Choose flavour").
type ConsumablesFormStepSectionProps = {
title: React.ReactNode;
children: React.ReactNode;
} & Omit<React.FieldsetHTMLAttributes<HTMLElement>, "title">;
All standard fieldset HTML attributes are forwarded except title.
UI primitive: @jti/ui MultipleFlavorsSelector / MultibrandMultipleFlavorsSelector
Source:
packages/ui/src/components/MultipleFlavorsSelector/MultipleFlavorsSelector.tsx
Exported from@jti/uiindex: ✅ (MultipleFlavorsSelector);MultibrandMultipleFlavorsSelectoris in its own barrel but not at the package root.
// Single-brand variant
type MultipleFlavorsSelectorProps = {
items: MultipleFlavorsSelectorItem[];
stockStatusElements: StockStatusElements;
onChange: (flavorSelection: FlavorsSelection) => void;
limit: number;
defaultFlavorsSelection?: FlavorsSelection | null;
shouldValidate?: boolean;
hasError?: boolean;
isProductDataLoading?: boolean;
error?: string;
className?: string;
};
// Multi-brand variant
type MultibrandMultipleFlavorsSelectorProps = {
brands: BrandWithFlavorItems[];
stockStatusElements: StockStatusElements;
onChange: (flavorSelection: FlavorsSelection) => void;
title: string;
limit: number;
defaultFlavorsSelection?: FlavorsSelection | null;
showValidation?: boolean;
hasError?: boolean;
isProductDataLoading?: boolean;
error?: string;
};