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