Skip to main content

MiniCart

Description​

A mini cart widget that displays a cart icon with item count and a dropdown showing cart contents. Auto-opens when items are added. Supports custom icon and dropdown components.

Import​

import { MiniCart } from '@components/frontStore/cart/MiniCart';

Usage​

import { MiniCart } from '@components/frontStore/cart/MiniCart';

function Header() {
return (
<header>
<MiniCart cartUrl="/cart" />
</header>
);
}

Props​

NameTypeRequiredDefaultDescription
cartUrlstringNo'/cart'URL to full cart page
dropdownPosition'left' | 'right'No'right'Dropdown alignment
showItemCountbooleanNotrueShow item count badge
CartIconComponentReact.FCNo-Custom icon component
CartDropdownComponentReact.FCNo-Custom dropdown component
classNamestringNo''Additional CSS classes
disabledbooleanNofalseDisable cart interaction

Examples​

Basic Usage​

import { MiniCart } from '@components/frontStore/cart/MiniCart';

function SiteHeader() {
return (
<header className="site-header">
<div className="logo">My Store</div>
<nav>...</nav>
<MiniCart />
</header>
);
}

Custom Position​

import { MiniCart } from '@components/frontStore/cart/MiniCart';

function Header() {
return (
<div className="header">
<MiniCart
dropdownPosition="left"
cartUrl="/checkout/cart"
/>
</div>
);
}

Without Item Count​

import { MiniCart } from '@components/frontStore/cart/MiniCart';

function Navigation() {
return (
<nav>
<MiniCart showItemCount={false} />
</nav>
);
}

Custom Icon Component​

import { MiniCart } from '@components/frontStore/cart/MiniCart';

function CustomIcon({ totalQty, onClick, isOpen, disabled }) {
return (
<button
onClick={onClick}
disabled={disabled}
className={`custom-cart-icon ${isOpen ? 'active' : ''}`}
>
<ShoppingBagIcon />
{totalQty > 0 && (
<span className="badge">{totalQty}</span>
)}
</button>
);
}

function Header() {
return (
<MiniCart CartIconComponent={CustomIcon} />
);
}

Custom Dropdown Component​

import { MiniCart } from '@components/frontStore/cart/MiniCart';

function CustomDropdown({ cart, onClose, cartUrl }) {
if (!cart?.items?.length) {
return (
<div className="empty-cart">
<p>Your cart is empty</p>
</div>
);
}

return (
<div className="custom-dropdown">
<h3>Cart Items</h3>
{cart.items.map(item => (
<div key={item.cartItemId}>
{item.productName} - {item.qty}
</div>
))}
<a href={cartUrl}>View Cart</a>
<button onClick={onClose}>Close</button>
</div>
);
}

function Header() {
return (
<MiniCart CartDropdownComponent={CustomDropdown} />
);
}

Custom Component Props​

CartIconComponent Props​

NameTypeDescription
totalQtynumberTotal items in cart
onClick() => voidToggle dropdown handler
isOpenbooleanDropdown open state
disabledbooleanDisabled state
showItemCountbooleanShow count badge
syncStatusobjectCart sync status

CartDropdownComponent Props​

NameTypeDescription
cartCartData | nullCart data object
dropdownPosition'left' | 'right'Alignment position
onClose() => voidClose dropdown handler
cartUrlstringFull cart page URL
setIsDropdownOpen(open: boolean) => voidControl dropdown state

Behavior​

Auto-Open on Add​

The dropdown automatically opens when an item is successfully added to the cart. This is triggered by the cart sync status.

Click Handling​

Clicking the cart icon toggles the dropdown. When disabled, clicks are ignored.

Default Components​

If no custom components are provided, uses:

  • DefaultMiniCartIcon - Shopping bag icon with badge
  • DefaultMiniCartDropdown - Dropdown with items list

Features​

  • Item Count Badge: Shows total quantity in cart
  • Auto-Open: Opens when items added
  • Custom Components: Replace icon or dropdown
  • Position Control: Left or right alignment
  • Disabled State: Prevent interaction when needed
  • Sync Status: Shows loading/syncing states
  • Responsive: Works on mobile and desktop